【问题标题】:Attempting to loop through list of dataframes and perform operation on one column in each dataframe尝试遍历数据帧列表并对每个数据帧中的一列执行操作
【发布时间】: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) 看起来您正在迭代的项目是原子向量,例如 letters1:3,而不是数据帧。
  • @RonakShah 抱歉,应该是 list 而不是 c()。 @svenhalvorson 我应该在循环之前将它们转换为数据帧吗?

标签: r


【解决方案1】:

我认为没有必要在这里创建数据框列表。这是你想要的吗?

library(dplyr)

result <- DoublePostsLeft %>%
  group_by(CoverageScheme) %>%
  summarise(nrow = n(), 
            average = mean(desired_column, na.rm = TRUE))

result

【讨论】:

    猜你喜欢
    • 2017-10-27
    • 1970-01-01
    • 2015-04-19
    • 2021-06-12
    • 1970-01-01
    • 2021-02-16
    • 2021-06-08
    • 2021-12-11
    • 1970-01-01
    相关资源
    最近更新 更多