首页 > 解决方案 > 导入多个文件,然后将计算输出到一个文件中

问题描述

我有多个名称为“子块#”的 .csv 文件:

01 区块1 01 区块2 01 区块3 02 区块1 02 区块2 02 区块3

我想

  1. 获取按“提示”分组的每个参与者的平均值(我当前的代码尝试获取每个文件的平均值,但不是每个主题)
  2. 将输出保存到一个 .csv 文件
files <- list.files(path="C:/Users/", pattern="*.csv", full.names=TRUE, 
    recursive=FALSE)
            for (file in files ){
              data<-read.csv(file)
              summarize.stat<-
                data%>% 
              group_by(Cue) %>%  # grouping stats
              drop_na() %>%
              summarize(count=n(),
                        mean.RT= mean(RT))
              write.csv(summarize.stat, paste("C:/Users/",'RTcue,csv',sep = ""), 
    row.names = FALSE, quote = FALSE)
         }

这是控制台中显示的内容 summarise()取消分组输出(用.groups参数 覆盖) 取消分组输出(用参数 覆盖) 取消分组输出(用参数覆盖) 取消分组输出(用参数 覆盖) 取消分组输出(用参数覆盖) 取消分组输出(用参数覆盖)summarise().groupssummarise().groupssummarise().groupssummarise().groupssummarise().groups

** 错误:summarise()输入有问题mean.RT。x 在为函数“mean”选择方法时评估参数“x”时出错:找不到对象“RT”** i 输入mean.RTmean(RT)。i 错误发生在第 1 组:Cue = "Center"。

所以我的问题是:1.如何修复错误?2.如何获得每个主题的平均值?

感谢您的任何建议!我已经为此苦苦挣扎了一段时间。

标签: rtidyverse

解决方案


有多种方法可以解决这个问题。一种选择是使用条件逻辑 withif检查exists读取数据中的列是否和summarise

library(dplyr)
library(purrr)
library(readr)
library(stringr)
nm1 <- tools::file_path_sans_ext(basename(files))
imap_dfr(setNames(files, nm1), ~ {
            dat <- read_csv(.x) 
            if(exists('RT', where = dat)) {
                   dat %>%
                     group_by(Cue) %>%
                     summarise(Count = n(), 
                        mean.RT= mean(RT, na.rm = TRUE), .groups = 'drop')  %>%
             mutate(filename = .y)
            
      
               } else tibble(Cue = first(dat$Cue),
         mean.RT = NA_real_, filename = .y)
               }) %>%

    write_csv(path  =  file.path("C:/Users/", "RTcue.csv"))

或者另一种选择是tryCatch


推荐阅读