【问题标题】:Match dataframes in R匹配 R 中的数据框
【发布时间】:2015-10-09 08:08:51
【问题描述】:

我正在尝试自定义匹配 2 个数据框(我认为与连接不同)。我想从 df1 和 df2 得到 df3。这是示例代码--

df1=data.frame(c1=c(1,1),c2=c(1,0),c3=c(0,0),c4=c(0,1))
> df1
  c1 c2 c3 c4
1  1  1  0  0
2  1  0  0  1
> df2=data.frame(c2=c(6,8),c3=c(4,5),c5=c(1,2))
> df2
    c2 c3 c5
  1  6  4 1
  2  8  5 2
> df3=data.frame(c1=c(NA,NA),c2=c(6,8),c3=c(4,5),c4=c(NA,NA))
> df3
  c1 c2 c3 c4
1 NA  6  4 NA
2 NA  8  5 NA

任何帮助表示赞赏!

【问题讨论】:

  • 为什么列名匹配时只选择第二组?关于如何到达df3 的一些解释会很好。
  • 也许merge(df1, df2, all.y = TRUE) ?
  • @RichardScriven - 对不起,如果我不清楚。我基本上想把 df2 放在 df1 格式。 df1 是我的模型训练集,df2 是我的测试集。我想在 df2 上使用 predict() 但列的顺序和数量应该相同..
  • 这听起来像 RandomForest。如果是这样,您应该将较大的数据集子集到训练和测试集中,因为模型中的偶数列必须是一致的。

标签: r dataframe


【解决方案1】:

先合并数据,保留df2中的所有行

df3 = merge(df1, df2, all.y = TRUE)

然后对列重新排序,以便仅存在 df1 中的列并且它们的顺序相同:

(df3 = df3[names(df1)])
#   c1 c2 c3 c4
# 1 NA  6  4 NA
# 2 NA  8  5 NA

请注意,这假设如果存在匹配项,您希望从额外的 df1 列中提取值。也就是说,如果df1 有一行包含c2 == 6c3 == 4,那么该行的c4c1 的值将以df3 而不是NA 结束。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 2018-04-18
    • 1970-01-01
    • 1970-01-01
    • 2017-12-15
    • 2018-11-07
    • 1970-01-01
    相关资源
    最近更新 更多