r - 如何使用 R 将每个文件的数据添加为附加行,从而将不同的 .csv 文件合并为一个完整的文件?

标签 r csv merge row

我有几个不同的文件夹,它们都包含一个 .csv 文件。所有这些 .csv 文件都有一个单独的列,其中包含实验的一种条件的数据。 我想以将每个文件的数据添加为新列的方式合并这些 .csv 文件。

目前,它看起来像这样:

C1.csv
102
106
152
196
223
486
553

C2.csv
296
299
843
1033
1996

但是,它希望有一个 .csv 文件,其中所有单独的文件都被复制到包含源文件名称的新列中,例如:

C1     C2     ...    Cn
102    296    ...    ...
106    299    ...
152    843    ...
196    1033   ...
223    1996   ...
486           ...
553           ...

到目前为止,我的代码如下:

myFiles = list.files(path = ".", recursive = TRUE, pattern = ".csv", full.names = TRUE)
data <- lapply(myFiles, read.table, sep="\t", header=FALSE)
Max <- max(sapply(data, length))
data <- lapply(data, function(x) c(x, rep(NA, Max - length(x))))
data <- do.call(cbind, data)
names(data) <- sub("^[^[:alnum:]]*([[:alnum:]]+)\\.csv$", "\\1", myFiles)

write.csv(data, "outfile.csv")

它生成了一个如下所示的文档,而不是在新列中添加每个 .csv 文件的数据:

enter image description here

最佳答案

可以使用列表中的read.table读取所有文件。使用 dplyr::bind_rows 合并所有数据。然后,使用 reshape2::dcast 以宽格式传播数据,其中每个文件的数据有一列。

# Get list of files in directory
fileList <- list.files(".", "*.csv", full.names = TRUE)

# Read file data. This will generate a list containing dataframes
listData <- lapply(fileList, read.table)

# Name list using name of files
names(listData) <- gsub(".csv","",basename(fileList))

library(tidyverse)
library(reshape2)

bind_rows(listData, .id = "FileName") %>%
  group_by(FileName) %>%
  mutate(rowNum = row_number()) %>%
  dcast(rowNum~FileName, value.var = "V1") %>%
  select(-rowNum) %>%
  write.csv(file="Result.csv")

# Content of Result.csv
# "","C1","C2"
# "1",102,296
# "2",106,299
# "3",152,843
# "4",196,1033
# "5",223,1996
# "6",486,NA
# "7",553,NA

关于r - 如何使用 R 将每个文件的数据添加为附加行,从而将不同的 .csv 文件合并为一个完整的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50897193/

相关文章:

R:向 data.frame 添加列以分为低、中、高范围

r - 使用 ggplot 和 coord_polar 绘制螺旋条形图 (Condegram)

r - 如何平衡不平衡的面板数据?

编写列表列表的 Python csv 文件

regex - 如何使用正则表达式将所有内容移动到 Notepad++ 中的一行

R 水平 Shiny 显示 wellPanel 对象

csv - 如何使用 JUnit 5 的 @CsvFileSource 忽略行

excel - 高效地从 .xlsx 电子表格中提取工作表名称

design-patterns - 合并数据的数据库架构设计模式

matlab - 通过 Matlab 中的 'ID' 字段加入具有相同字段名的 2 个结构