【问题标题】:Merge Multiple Data Frames with Different Feature Sets [duplicate]合并具有不同特征集的多个数据框[重复]
【发布时间】:2017-12-13 18:53:30
【问题描述】:

我尝试搜索并发现了类似的问题,但不是同一个问题。这似乎应该有点普遍,所以我可能只是想念它。

我正在使用 read.table 读取多个 CSV 文件。我想将这些合并在一起,使具有相同 ID 列的行 cbind() 在一起,其余的留空。下面的例子可能更好地说明了

文件 1

UserID    val1     val2    
  1                  2
  2        1         3

文件 2

UserID    col1  
  1         a
  3         z

文件 3

UserID    feat1    feat2
  1        Hi       Hello
  3        Moshi    Moshi

想要的结果

UserID      val1      val2    col1     feat1    feat2
1                      2        a       Hi       Hello
2            1         3
3                               z       Moshi    Moshi

我不希望它为缺失值添加零。如果可能的话,我不希望它用 NA 填充任何东西。

我只想在 UserID 列上合并数据集(在所有情况下为 3+,平均为 10),保持其他所有内容相同。

我确定有一个工具可以解决这个问题,我只是找不到它。

【问题讨论】:

  • 你可以使用reduce:df = Reduce(function(...) merge(..., all = T), list(file_1, file_2, file_3))作为填充值合并,我能想到的最简单的方法是:df[is.na(df)] = ''这假设所有NA值在数据集中被视为相同.否则,您必须在每个数据帧中编写不同的 NAs 代码,以免丢失信息。
  • 执行此操作的正确方法将导致NA 处于不匹配的位置。这是放置在那里的正确值。如果你想要别的东西,你需要第二步来替换它们。但是,如果您混合使用字符/数字列,则要求将它们全部替换为相同的值有点荒谬。所以你最好坚持NA。

标签: r dataframe import-from-csv


【解决方案1】:

合并功能听起来很合适。

merged_df <- merge(df1, df2, by="UserID")

然后您可以迭代地应用它,例如

for(i in 2:number_data_frames){
  merged_df <- merge(merged_df, list_of_dfs[[i]], by="UserID")
}

【讨论】:

    猜你喜欢
    • 2021-02-22
    • 1970-01-01
    • 1970-01-01
    • 2020-05-27
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    • 2014-08-17
    • 2018-09-10
    相关资源
    最近更新 更多