Перестановка таблицы на основе определенного условия и использование цикла for - PullRequest
0 голосов
/ 20 февраля 2019

Я начну непосредственно с кода, это должно прояснить, какова цель:

library(gapminder)    
head(gapminder)

    # A tibble: 6 x 6
  country     continent  year lifeExp      pop gdpPercap
  <fct>       <fct>     <int>   <dbl>    <int>     <dbl>
1 Afghanistan Asia       1952    28.8  8425333      779.
2 Afghanistan Asia       1957    30.3  9240934      821.
3 Afghanistan Asia       1962    32.0 10267083      853.
4 Afghanistan Asia       1967    34.0 11537966      836.
5 Afghanistan Asia       1972    36.1 13079460      740.
6 Afghanistan Asia       1977    38.4 14880372      786.

Сохранение названий стран в другой переменной:

y <- unique(gapminder$country, incomparables = FALSE)
    length(y)
    [1] 142
    df.names <- paste(y, sep = "")

Ожидаетсявывод:

Я хочу иметь 142 столбца +1 для year и только значения pop.Код, который я пробую, выглядит следующим образом:

for(i in 1:length(y)){
  d.frame[,i] <- gapminder$pop %>% filter(gapminder$country==y[i])
  assign(df.names[i], d.frame)
} 

Этот код пытается присвоить значение pop, соответствующее каждому year в строках, а имя столбца соответствует country.year не использовался в коде, потому что я добавляю значение позже и прямо сейчас, просто выбирая значения country и pop на основе условия.Поскольку годы в этой таблице повторяются, Я хочу, чтобы этот столбец присутствовал только один раз (позже).Итак, итоговая таблица должна иметь размер 12 * 143 (12 строк и 143 столбца). Это не работает.

Есть идеи?Буду также признателен за любые предложения, касающиеся дизайна и структуры, если это необходимо.

1 Ответ

0 голосов
/ 20 февраля 2019

I думаю это то, что вы хотите:

gapminder %>%
    select(country, pop, year) %>%
    spread(country, pop)

Это дает вам одну строку в год и один столбец на страну, содержащую население в этом году.

(spread является частью пакета {tidyr}.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...