【问题标题】:How to merge two dataframe with several same IDs in r如何在r中合并具有多个相同ID的两个数据框
【发布时间】:2020-10-21 08:06:10
【问题描述】:

我尝试像代码中的那样合并两个 data.frames。主要问题是我有几行具有相同的 ID,但我想将所有值(相位)与 df1 中的 ID 合并。 我试图搜索类似的问题,但找不到任何问题。

df1<-as.data.frame(c("a","a","a","a","a","c","c","c","b","b"))
colnames(df1)<-c("ID")
df2<-data.frame(c("a","a","a","a","a","b","b"),c(1,1,0,0,1,1,-1))
colnames(df2)<-c("ID","phase")

output<-cbind(c("a","a","a","a","a","c","c","c","b","b"),c(1,1,0,0,1,NA,NA,NA,1,-1))

我尝试使用 merge() 但它导致的 data.frame 比预期的输出大得多。此外,我还丢失了应该与“c”合并的 NA。

merge_out<-merge(df1,df2[,c("ID","phase")],by="ID")

ID phase
a     1
a     1
a     0
a     0
a     1
a     1
a     1
a     0
a     0
a     1
a     1
a     1
a     0
a     0
a     1
a     1
a     1
a     0
a     0
a     1
a     1
a     1
a     0
a     0
a     1
b     1
b    -1
b     1
b    -1

有什么想法吗?谢谢!

【问题讨论】:

    标签: r merge


    【解决方案1】:

    这行得通吗:

    library(dplyr)
    > df1 %>% group_by(ID) %>%  mutate(uid = paste0(row_number(), ID)) %>% left_join(
    + df2%>% group_by(ID) %>% mutate(uid = paste0(row_number(), ID))
    + ) %>% select(-uid)
    Joining, by = c("ID", "uid")
    # A tibble: 10 x 2
    # Groups:   ID [3]
       ID    phase
       <chr> <dbl>
     1 a         1
     2 a         1
     3 a         0
     4 a         0
     5 a         1
     6 c        NA
     7 c        NA
     8 c        NA
     9 b         1
    10 b        -1
    

    【讨论】:

    • 成功了!很有用,谢谢!只有一件事,要运行此代码,必须上传 srvyr 库。只是为了让别人知道。谢谢!
    • 我只用过 dplyr
    【解决方案2】:

    也许你正在寻找pmatch

    cbind(df1, phase=df2$phase[pmatch(df1$ID, df2$ID)])
    #cbind(df1, df2[pmatch(df1$ID, df2$ID), "phase", drop = FALSE]) #Alternative
    #   ID phase
    #1   a     1
    #2   a     1
    #3   a     0
    #4   a     0
    #5   a     1
    #6   c    NA
    #7   c    NA
    #8   c    NA
    #9   b     1
    #10  b    -1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-02
      • 2018-10-30
      • 1970-01-01
      • 1970-01-01
      • 2017-06-24
      • 2020-07-20
      • 1970-01-01
      • 2012-11-26
      相关资源
      最近更新 更多