我有一个数据帧列表,其中所有元素都有简短的索引名。我正在尝试根据包含索引(键)和实名(名称)的列表中的索引数据框,向包含其实名的某些数据框添加新列。
我实际上认为这是一个非常简单的任务,直到我对代码的赋值部分的索引进行介绍性麻烦,如下所示:
# sample data
data_list <- list(data.frame(names=c("iris", "TootgGrowth", "airquality"), key=c("name01", "name02", "name03")),
iris, ToothGrowth, airquality)
names(data_list) <- c("index", "name01", "name02", "name03")
# adding a new column to selected list-dataframes
data_list[names(data_list) != "index"] <-
lapply(names(data_list)[names(data_list) != "index"],
function(x){data_list[x]$new_col <- data_list$index$names[data_list$index$key == x]})
data_list$index$names[data_list$index$key == x]
部分为我提供了我想要分配的正确值,但是我仍然不知道如何在data_list[x]$new_col <-
部分中正确索引,以便分配有效。我还尝试使用assign(paste0("data_list$", x, "$new_col"), ...)
,但显然也行不通。
谢谢您的建议!
答案 0 :(得分:2)
您可以尝试类似
lapply(names(data_list), function(x) {
if (x != "index")
cbind(data_list[[x]],new_col = data_list$index$names[data_list$index$key == x])
else
data_list[[x]]
})
如果列表元素的name
是“索引”,那么我们将按原样返回数据框,如果不是,则将new_col
添加到具有其名称的数据框。