Согласно документации left_join
, оба x
и y
должны быть фреймами данных .
Ваш c
- это список, как и c[i]
.
Однако c[[i]]
- это фрейм данных. Поэтому измените свой код, включив в него две квадратные скобки.
EC_New <- c[[i]] %>%
left_join(c[[i+1]], by = c("Country","Year"))
Я думаю, вы также можете заменить свой код, используя Reduce
:
EC_New2 <- Reduce(left_join, c)
Затем проверьте:
identical(EC_New, EC_New2) # should be TRUE
Но я не уверен, так как у меня нет вашего данные. Он должен работать, если общие столбцы: только «Страна» и «Год».
И благодаря этому ответу, вы можете использовать следующую команду, если " Страна »и« Год »- это не единственные общие столбцы.
EC_New2 <- Reduce(function(x, y) left_join(x, y, by=c("Country","Year")), c)
Кстати, старайтесь не использовать имена функций, такие как c
, для именования ваших объектов R. Хотя R позволяет это, позже это может привести к путанице. Например, если вы хотите объединить x
и y
, но случайно наберете c[x, y]
вместо c(x, y)
, R может вернуть не ошибку, а нечто совершенно неожиданное.