【问题标题】:Executing a conditional merge [closed]执行条件合并[关闭]
【发布时间】:2012-12-06 16:48:29
【问题描述】:

我有 2 个数据框:

df1                                              
Column1        Column2        
A               id1             
B               id2             
C               id3             
B               id2             
D               id4             
A               id1             
C               id3

df2
Column1      Column2      Column3
X             m1            m2
A             m3            m4
A             m3            m4
Y             n1            n2
A             m3            m4
Z             p1            p2
X             m1            m2

我想合并df1df2,条件是如果df1的第1列中的行是A,它应该根据第2列有选择地合并df2中的第2列和第3列df1

所以最终的 df1 看起来像这样:

df1                                                                           

Column1        Column2.1    Column1.2      Column2.2      Column3.2
A               id1             id1             m3            m4
B               id2                                   
C               id3         
B               id2         
D               id4         
A               id1             id1             m3            m4
C               id3         

到目前为止,我已经通过专门提取 df1 的第 1 列中包含“A”的行来管理这个问题。然后我在 for 循环中应用了一个合并来获得df2 的两列。是否有可能有一个 if 循环来帮助专门执行 df1df2 之间的条件合并?

这是df1df2的结构:

df1 <- structure(list(Column1 = structure(c(1L, 2L, 3L, 2L, 4L, 1L, 
3L), .Label = c("A", "B", "C", "D"), class = "factor"), Column2 = structure(c(1L, 
2L, 3L, 2L, 4L, 1L, 3L), .Label = c("id1", "id2", "id3", "id4"
), class = "factor")), .Names = c("Column1", "Column2"), class = "data.frame", row.names = c(NA, 
-7L))


df2 <- structure(list(Column1 = structure(c(2L, 1L, 1L, 3L, 1L, 4L, 
2L), .Label = c("A", "X", "Y", "Z"), class = "factor"), Column2 = structure(c(1L, 
2L, 2L, 3L, 2L, 4L, 1L), .Label = c("m1", "m3", "n1", "p1"), class = "factor"), 
    Column3 = structure(c(1L, 2L, 2L, 3L, 2L, 4L, 1L), .Label = c("m2", 
    "m4", "n2", "p2"), class = "factor")), .Names = c("Column1", 
"Column2", "Column3"), class = "data.frame", row.names = c(NA, 
-7L))

【问题讨论】:

  • 如果您向我们提供来自您的两个输入列的实际样本、到目前为止您用于完成这项工作的代码以及您的预期输出,这可能会更有帮助。您可以使用突出显示的文本上的{} 按钮来缩进所有这些,以便正确格式化。
  • @jilber,你太客气了,不能代表原始发布者完成所有这些工作。
  • 谢谢@AnandaMahto,我只是想稍微改进一下这个问题。
  • 第三列Column1.2是否与Column2.1冗余。除了 Column1.2
  • 我会投票给一个可重现的例子和期望的结果。我们现在所拥有的只是略低于这条线(对我而言)。

标签: r merge dataframe conditional-operator


【解决方案1】:

如果 df1 和 df2 如上所述定义

library(sqldf)


final<-sqldf("select df1.Column1 as Column1 ,df1.Column2,(Select distinct df2.Column2 from df2 where df2.Column1=df1.Column1) as Column2_2,(Select distinct df2.Column3 from df2 where df2.Column1=df1.Column1)as Column3_2 from df1 left join df2 on df1.Column1=df2.Column2")


Column1.2<-ifelse(final$Column1=="A",final$Column2,NA)


final<-cbind(final,Column1.2)

【讨论】:

    猜你喜欢
    • 2020-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 2021-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多