r - 导入多个文件,然后将计算输出到一个文件中
问题描述
我有多个名称为“子块#”的 .csv 文件:
01 区块1 01 区块2 01 区块3 02 区块1 02 区块2 02 区块3
我想
- 获取按“提示”分组的每个参与者的平均值(我当前的代码尝试获取每个文件的平均值,但不是每个主题)
- 将输出保存到一个 .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()
.groups
summarise()
.groups
summarise()
.groups
summarise()
.groups
summarise()
.groups
** 错误:summarise()
输入有问题mean.RT
。x 在为函数“mean”选择方法时评估参数“x”时出错:找不到对象“RT”** i 输入mean.RT
是mean(RT)
。i 错误发生在第 1 组:Cue = "Center"。
所以我的问题是:1.如何修复错误?2.如何获得每个主题的平均值?
感谢您的任何建议!我已经为此苦苦挣扎了一段时间。
解决方案
有多种方法可以解决这个问题。一种选择是使用条件逻辑 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
推荐阅读
- python - 使用时间戳对 Python 字典列表进行排序
- javascript - 在 Flutter 中构建 d3.js 小部件
- javascript - 引导表 Javascript 总和变成 NaN?
- linux - Linux - Git Credentials - 如何删除用户名/密码组合的实例?
- ruby-on-rails - 让用户调整“存在”验证?
- javascript - js 脚本未在 Git Hub 页面上加载
- neo4j - Neo4j:Cypher 查询如何将结果与仅包含在数组中的值匹配
- reactjs - 在 AWS Amplify 上重新加载我的 React 应用程序时出现“拒绝访问”错误
- swift - Coredata更新/插入一对多关系
- c# - C#中整数数组的所有值求和期间溢出异常