我正在尝试将新列添加到具有不同长度的多个数据帧中。
例如,我有以下三个数据帧:
iris1 <- iris[iris$Species=="setosa" & iris$Petal.Width == 0.2,]
iris2 <- iris[iris$Species=="versicolor",]
iris3 <- iris[iris$Species=="virginica",]
我可以使用以下行将列添加到单个数据框:
iris1$Sepal <- rowMeans(iris1[, c("Sepal.Length", "Sepal.Width")], na.rm = T)
因此,我尝试编写一个for
循环以对多个数据帧重复此操作,如下所示,但是它只是创建了一个新的数据帧i
,而我在弄清楚编写正确的循环时遇到了麻烦。
iris.list <- list(iris1, iris2, iris3)
for (i in iris.list) {
i$Sepal <- rowMeans(i[, c("Sepal.Length", "Sepal.Width")], na.rm = T)
}
(我在StackOverflow上进行搜索,并指出人们还建议尽可能使用apply
而不是for
循环,但是无法使apply
与具有不同的长度。)
答案 0 :(得分:0)
这可能不是最好的方法,但是我想使用此方法使返回代码时更容易阅读:
for (i in 1:length(iris.list)){
currIris <- iris.list[[i]]
currIris$Sepal <- rowMeans(currIris[, c("Sepal.Length", "Sepal.Width")], na.rm = T)
iris.list[[i]] <- currIris
}
答案 1 :(得分:0)
使用lapply
:
iris.list <- lapply(iris.list, function(x) cbind(x, Sepal = rowMeans(x[, c("Sepal.Length", "Sepal.Width")], na.rm = T)))