【问题标题】:How to merge multiple CSV files that have common Subject ID column and many different variables in other columns? IN R如何合并具有共同主题 ID 列和其他列中许多不同变量的多个 CSV 文件?输入
【发布时间】:2019-01-16 07:58:05
【问题描述】:

假设我有 100 个 csv 文件,它们在第一列都有共同的主题 ID,但其他列彼此完全不同。我想要一个在第一列中具有 ID 的 excel 文件,而其他列是所有其他 csv 文件中的所有列。我怎样才能做到这一点?我不能合并它们中的每两个并将它们合并到 R 中的另一个。这会令人沮丧。

考虑:

file1.csv with 3 columns "subjectID","a","b"
file2.csv with 3 columns "subjectID", "c","d"
file3.csv with 2 columns "subjectID", "e"

最后我想要一个 6 列的 csv 文件:

"subjectID","a","b","c","d","e" 

【问题讨论】:

  • 您能否更具体地说明您的预期输出?也许有一些示例 csv 输入和输出?不一定是 100 个 csv 文件,几个小文件就足够了。

标签: r csv merge


【解决方案1】:

您可以执行以下操作

# Read in files 
#lst <- lapply(files, read.csv)

# Generate similar sample data to demonstrate
lst <- list(
    data.frame(subjectID = letters[1:10], a = runif(10), b = runif(10)),
    data.frame(subjectID = letters[1:10], c = runif(10), d = runif(10)),
    data.frame(subjectID = letters[1:10], e = runif(10), f = runif(10)),
    data.frame(subjectID = letters[1:10], g = runif(10), h = runif(10)))

# Merge data from all files on subjectID
Reduce(function(x, y) merge(x, y, by = "subjectID"), lst)
#   subjectID         a           b         c          d         e           f
#1          a 0.3303817 0.297198993 0.9521621 0.07472854 0.8422689 0.642384618
#2          b 0.4693850 0.029617471 0.1079085 0.97297463 0.8047761 0.002465216
#3          c 0.1232060 0.351755203 0.4649148 0.97412774 0.3047000 0.290868067
#4          d 0.7906051 0.402014018 0.7141169 0.69951165 0.4372228 0.142227230
#5          e 0.3958683 0.119870791 0.1061828 0.07939243 0.5506707 0.276125793
#6          f 0.8460007 0.032571856 0.4205542 0.03433463 0.4095929 0.561597813
#7          g 0.3087469 0.002836689 0.6625422 0.43830865 0.5944669 0.186904600
#8          h 0.3501046 0.599942351 0.2073871 0.11963722 0.7769929 0.367783960
#9          i 0.7952080 0.400595114 0.9792009 0.30959206 0.5644129 0.122465491
#10         j 0.3829504 0.972797955 0.9483458 0.93079712 0.2273367 0.726364011
#           g          h
#1  0.3224803 0.09905568
#2  0.9986640 0.42053490
#3  0.5484119 0.88754806
#4  0.3274199 0.87417816
#5  0.9474794 0.40207119
#6  0.3864848 0.97977549
#7  0.4875860 0.31788236
#8  0.5094075 0.86424560
#9  0.3900625 0.11860494
#10 0.7064986 0.11939311

请注意,我已生成 4 个data.frames 的list 作为样本数据;所有data.frames 共享一个公共列subjectID。在您的情况下,您将使用例如读取数据read.csv 基于files 中给出的文件名。

【讨论】:

  • 非常感谢您的回复。我运行这段代码: lst
  • @Helia 您可能需要更改用于合并数据集的列的名称。在我的例子中,我假设它的名字是"subjectID"。在您的情况下,这可能有所不同。您应该将 "subjectID" 更改为所有文件共有的列的名称。
  • 我也将其更改为“subjectID”。我仍然有这个错误。
  • @Helia。嗯,您的意思是您更改了原始数据集的列名? "subjectID" 必须是所有 CSV 文件共有的唯一列的名称。每个文件必须只有一列具有该名称。
  • @Helia 这篇文章中的例子应该可以工作。因此,您的实际数据必须有所不同。在不了解 CSV 文件的情况下很难提供帮助。您可以编辑您的帖子以包含三个 CSV 文件的前 6 行吗?
猜你喜欢
  • 2020-07-16
  • 2021-10-04
  • 1970-01-01
  • 2021-12-17
  • 2021-04-28
  • 1970-01-01
  • 2020-11-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多