【问题标题】:Conducting summary statistics on multiple dataframes in R在 R 中对多个数据帧进行汇总统计
【发布时间】:2020-05-25 05:35:21
【问题描述】:

如果这已在其他地方得到回答,我们深表歉意。我希望在 R 中跨多个数据帧计算和输出汇总统计数据。

就上下文而言,我的数据存储在每个主题的.txt 文件中——只有一列:1 个变量的 63 个 obs。我总共有 48 个文件对应于 48 个主题。

我将这些文件读入 Rstudio 并使用以下脚本创建了多个每个主题的数据框:

filenames <- gsub("\\.txt$","", list.files(pattern="\\.txt$"))             

for(i in filenames){
  assign(i, read.delim(paste(i,".txt", sep="")))
  }

数据帧的命名法是例如001_fd, 002_fd ...

所以我希望做的是创建一个 for 循环,计算每个数据帧的摘要统计数据,然后将每个数据帧的结果输出到单个 csv 文件中。

这里的任何帮助将不胜感激

【问题讨论】:

  • 嗨,如果答案对您有帮助,请随时accept one of the answer,点击投票按钮旁边的复选标记最适合您:-) 每个帖子只能接受一个答案。

标签: r statistics


【解决方案1】:

最好不要让对象名称以数字开头。您也没有提到汇总统计是什么意思,您到底要计算什么,我将在这里计算meanmedian,如果需要,您可以包括更多。

首先,使用mget获取列表中的所有数据帧

list_df <- mget(ls(pattern = '\\d+_fd'))

使用lapply,您可以计算任何您想要的。假设您在每个数据框中有一个以x 作为列名的列,您可以这样做

output_df <- do.call(rbind, lapply(list_df, function(df) 
                     data.frame(mean = mean(df$x), med = median(df$x))))

或者使用purrr::map_df 可以缩短此时间。

output_df <- purrr::map_df(list_df, 
            ~data.frame(mean = mean(.x$x), med = median(.x$x)))

将结果写入 csv。

write.csv(output_df, 'results.csv', row.names = FALSE)

【讨论】:

    【解决方案2】:

    您不必使用 assign 为每个 txt 文件创建变量。

    只需使用list.files所有txt文件并将每个文件循环到一个新的空数据框。

    这是最简单的方法,但可能不是最有效的方法。

    filenames <- list.files(pattern="*.txt")
    
    output = data.frame()
    for(f in filenames){
      content = read.delim(f,header = FALSE)
      sum = summary(content[,1])
      output = rbind(output,sum)
    }
    
    colnames(output) = c("Min.","1st Qu.","Median","Mean","3rd Qu.","Max.")
    write.csv(output,"output.csv",row.names = FALSE)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多