У меня возникают трудности при использовании цикла for для добавления новых данных к каждому элементу фрейма данных списка.
Если у меня есть список из двух фреймов данных (filelist), и я хочу «dplyr :: left_join» или «объединить» каждый фрейм данных в списке с другими данными из одного фрейма данных, он, похоже, не появляется в списке позже. Однако, если я использую одни и те же команды пошагово и отдельно для каждого элемента фрейма данных в списке, я получаю те же предупреждения (из-за отсутствия уровней факторов), но желаемый результат. Например:
некоторые кадры данных
df1 <- data.frame(x = 1:3, y=letters[1:3])
df2 <- data.frame(x = 1:5, y=letters[1:5])
# make list of dataframes
filelist <- list(df1,df2)
# new data frame to add to the data frames in the list by indexing "y"
df3 <- data.frame(animal = c(rep("snake", 7)), y=letters[1:7], geno = c("aa", "ab", "ac", "aa", "ac", "ab", "ae"))
# merge df3 into both data frames in the filelist
for (i in 1:length(filelist)) {dplyr::left_join(filelist[[i]], df3, by = "y")}
## Gives the following warning because some factor levels are missing between datasets
Warning message:
Column `y` joining factors with different levels, coercing to character vector
возвращенный результат совпадает с исходным списком файлов
> filelist
[[1]]
x y
1 1 a
2 2 b
3 3 c
[[2]]
x y
1 1 a
2 2 b
3 3 c
4 4 d
5 5 e
Ожидаемый результат (выполняется путем объединения каждого элемента списка отдельно, а затем создания нового списка)
new1 <- dplyr::left_join(filelist[[1]], df3, by = "y")
new2 <- dplyr::left_join(filelist[[2]], df3, by = "y")
newlist <-(new1,new2)
> newlist
[[1]]
x y animal geno
1 1 a snake aa
2 2 b snake ab
3 3 c snake ac
[[2]]
x y animal geno
1 1 a snake aa
2 2 b snake ab
3 3 c snake ac
4 4 d snake aa
5 5 e snake ac
Каков наилучший способ сделать это, не вынимая каждый фрейм данных из исходного списка, добавляя новые данные, а затем создавая новый список?