【发布时间】:2014-06-03 21:06:37
【问题描述】:
R 3.0.3:我有 40 个 csv 文件,它们的结构都与我想将 rbind 相同的结构放入一个文件中,这样我就可以计算一列的平均值。
我搜索过:
- 这个网站
R in a Nutshell-
R_Intro来源 -
?rbind Help在 RStudio 中
我找不到答案。
有什么建议/指点吗?
【问题讨论】:
R 3.0.3:我有 40 个 csv 文件,它们的结构都与我想将 rbind 相同的结构放入一个文件中,这样我就可以计算一列的平均值。
我搜索过:
R in a NutshellR_Intro 来源?rbind Help 在 RStudio 中我找不到答案。
有什么建议/指点吗?
【问题讨论】:
使用此处的答案 [Importing several files and indexing them]
列出带有 .csv 扩展名的文件 - 这假定您的工作目录中只有 .csv 文件是您要阅读的文件
files <- list.files(pattern = '\\.csv')
将文件读入列表 - 有标题吗?
tables <- lapply(files, read.csv, header = TRUE)
rbind 文件
combined.df <- do.call(rbind , tables)
然后您可以找到 mean - 找出哪些列是数字
s <- sapply(combined.df, is.numeric)
求数值变量的平均值
colMeans(combined.df[s])
【讨论】:
rbind() 之前,我想添加一个唯一标识符(例如 0、1、2 等数字),它可以帮助我区分哪些数据来自文件 1,哪些来自文件,那么我该如何实现呢?我目前正在尝试loop(),但它变得有点乱。
tables <- lapply(files, function(x) cbind(read.csv(x, header = TRUE), id=x)) 添加文件名,或者使用tables <- lapply(seq_along(files), function(x) cbind(read.csv(files[x], header = TRUE), id=x)) 添加数字;或在列表中使用data.table,如上面的答案:names(tables) <- files ; data.table::rbindlist(tables, idcol=TRUE)
在更现代的 plyr 方法中:
files <- list.files(...)
data <- adply(files, 1, read.table)
(星期六下午:未经测试的代码,但方法很好)
【讨论】: