【问题标题】:match first table to second table and copy corresponding information from second table in to first table using R将第一个表匹配到第二个表并使用 R 将相应信息从第二个表复制到第一个表
【发布时间】:2017-02-16 15:27:09
【问题描述】:

我想从参考表的列种中提取信息并将其添加到表1的列种中

a <- c(1:10)
b <- c(2001,NA,NA,2004,2005,NA,2007,NA,2009,2010)
c <- c('A','B',NA,'D','E','F','G','H',NA,NA)
table1 <- data.frame(serial=a, id=b, species=c)

e <- c(2001:2010)
f <- c('A','B','C','D','E','F','G','H','I','J')
reference_table <- data.frame(id=e, species=f)

我想要两个不同的输出

输出 1 - 在第 9 行和第 10 列中分别得到 I 和 J,而保留第 3 行的 NA

#table1
#Serial  id  species
# 1     2001   A
# 2     NA     B
# 3     NA     NA
# 4     2004   D
# 5     2005   E
# 6     NA     F
# 7     2007   G
# 8     NA     H
# 9     2009   I
# 10    2010   J

输出 2 - 在第 2、6 和 8 列的第 2、6 和 8 行分别得到 2002、2006 和 2008。

#table1
#Serial  id  species
# 1     2001   A
# 2     2002   B
# 3     NA     NA
# 4     2004   D
# 5     2005   E
# 6     2006   F
# 7     2007   G
# 8     2008   H
# 9     2009   I
# 10    2010   J

【问题讨论】:

  • 您尝试过merge() 吗?您遇到的具体问题是什么?
  • @MrFlick 我原来的 table1 是 9460 x 47,当我使用 merge(x = table1, y = reference_table, by = "ID", all = TRUE) 时,我得到了 1000 万行的输出跨度>
  • 好吧,你可能不想要all=T。您将需要 all.x=Tall.y=T 进行左连接或右连接。
  • @MrFlick 现在我使用了 all.x =T,它比原始表多 1000 行,如果 all.y =T 比原始表少 1600 行
  • 你碰巧有重复吗?

标签: r join merge


【解决方案1】:

我用的是 MySQL

UPDATE table1 AS a JOIN reference_table AS b ON a.species = b.species SET a.id = b.id

UPDATE table1 AS a JOIN reference_table AS b ON a.id= b.id SET a.species  = b.species 

【讨论】:

    猜你喜欢
    • 2012-08-13
    • 1970-01-01
    • 2020-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多