【发布时间】:2021-07-23 03:30:38
【问题描述】:
我正在尝试遍历我拥有的数据帧列表,并且对于每个数据帧中的同一列,将该列相加,然后将其除以该数据帧中的行数并打印出来。不向新数据框添加行/列,我只希望它为每个数据框打印结果。我还希望它分别打印出每个数据帧中的行数。
我使用 for 循环创建了这个数据框列表:
Coverages <- list('Cover 0', 'Cover 1', 'Cover 2', 'Cover 3')
DoublePostsLeftDFs <- c()
for (x in Coverages) {
assign(paste("DoublePostsLeft", str_replace_all(x, " ", ""), sep=""), DoublePostsLeft %>% filter(CoverageScheme == x))
name <- paste("DoublePostsLeft", str_replace_all(x, " ", ""), sep="")
DoublePostsLeftDFs <- append(DoublePostsLeftDFs, name)
这成功地创建了我需要的所有数据框,但我不知道更好的方法来列出它们的名称,这就是我怀疑我的问题的来源。到目前为止,这是我尝试做的事情:
for (x in DoublePostsLeftDFs) {
row_number <- nrow(x)
average <- sum(x$desired_column)/nrow(x)
print(row_number)
print(average)
}
当我使用它时出现错误:Error: $ operator is invalid for atomic vectors
然后我尝试了这个:
for (x in DoublePostsLeftDFs) {
new <- as.data.frame(x)
row_number <- nrow(new)
average <- sum(new$desired_column)/nrow(new)
print(row_number)
print(average)
}
它所做的只是打印出来:
[1] 1
[1] 0
对于列表中的每个数据框。我怀疑这与我如何创建数据框列表有关?任何帮助将不胜感激。
【问题讨论】:
-
您的数据帧存储在哪里,您从中创建数据帧列表?
Coverages是什么? -
这部分:
for (x in DoublePostsLeftDFs) {...sum(x$desired_column)/nrow(x)看起来您正在迭代的项目是原子向量,例如letters或1:3,而不是数据帧。 -
@RonakShah 抱歉,应该是
list而不是c()。 @svenhalvorson 我应该在循环之前将它们转换为数据帧吗?
标签: r