【发布时间】:2019-12-19 09:32:58
【问题描述】:
我正在尝试修改数据框并努力将我的操作组合到一个 for 循环中。我想根据一个特定的列对数据框进行子集化,将不同的行附加到每个子集,然后将修改后的子集再次组合成一个数据框。我们以虹膜数据为例:
#Create data frame subsets based on Species column
iris_subs <- split(iris, iris$Species)
#create an empty data frame with the same columns as in iris and one empty row
emptydf <- iris[FALSE,]
emptydf[nrow(emptydf)+1,] <- NA
#create a data frame with sums for each species
iris %>% group_by(Species) %>% summarise_all(sum) -> iris_sums
iris_sums <- iris_sums[,-c(1)] #delete column with species names
#Combine data frames into one data frame with original data, sum for this species and an empty row for each subset
iris_setosa <- bind_rows(iris_subs[1], iris_sums[1,], emptydf)
iris_versicolor <- bind_rows(iris_subs[2], iris_sums[2,], emptydf)
iris_virginica <- bind_rows(iris_subs[3], iris_sums[3,], emptydf)
new_iris <- bind_rows(iris_setosa, iris_versicolor, iris_virginica)
这段代码完成了这项工作。但是,我想以这种方式处理数百个数据帧,并且每个数据帧的不同物种的数量各不相同。如何自动化 for 循环中的最后一部分?
我想要这样的东西
#empty data frame to store output
new_iris <- iris[FALSE,]
for (i in iris_subs) {
new_iris[i] <- bind_rows(iris_subs[i], iris_sums[i,], emptydf)
new_iris <- merge(new_iris[i])
}
Error in iris_subs[i] : invalid subscript type 'list'
除了错误之外,这可能太简单了……我是 R 初学者,已经在网上搜索了好几天,但找不到任何答案。有没有人对如何实现这一目标提出建议?感谢您的任何提示!
【问题讨论】: