【问题标题】:How to column with matching value from one R data table to another [duplicate]如何将具有匹配值的列从一个 R 数据表列到另一个 [重复]
【发布时间】:2015-12-08 22:49:33
【问题描述】:

我已经看过类似这样的其他解决方案:How to copy specific values from one data column to another while matching other columns in R?,但这并不是我真正需要的。我知道我可以用 for 循环来做所有事情,但是我有几个类似的大型数据集,而且我知道找到一种单行解决方案会更有效率。

例如,我有两个数据表:

df1 <- data.frame(ID=c(1,1,1,1,2,2,2), CODE=c("cd1", "cd2", "cd3", "cd4", "cd2", "cd3", "cd4"), FREQ=c(2,3,1,2,1,2,3))
df2 <- data.frame(CODE=c("cd1", "cd2", "cd3", "cd4"), DESCRIPTION=c("code1", "code2", "code3", "code4"))

dt1 <- data.table(df1)
dt2 <- data.table(df2)

我想要做的是将列DESCRIPTION添加到第一个数据表中,并具有来自dt2的匹配值。

我尝试过 match 和 which,像这样:

dt1[,DESCRIPTION:=dt2$DESCRIPTION[which(dt1$CODE==dt2$CODE)], by:=.(ID,CODE)]

但是我收到警告并且实际上不起作用...这一定是一件我看不到它的简单事情...关于如何做到这一点的任何想法?

【问题讨论】:

  • df3&lt;-merge(df1,df2,by='CODE')
  • 你为data.table使用了不正确的标签
  • 试试dt1[dt2, DESCRIPTION := i.DESCRIPTION, on = "CODE"]。你真的需要通过小插曲
  • 有人可以回答这个问题,不要让它处于当前状态。也允许自我回答。
  • 谢谢,我认为它会很简单,但从来没有(我感到羞耻!)之前使用过合并...另外,我确实尝试找到正确的标签,对此感到抱歉。我确实在这里查看了小插曲:cran.r-project.org/web/packages/data.table,但找不到任何适合我的案例。 @DavidArenburg,你会建议我在哪里寻找 data.table 的未来工作?我查看了教程,但没有找到任何解决从其他表中获取值的方法......谢谢!

标签: r data.table


【解决方案1】:

您可以使用 Merge 功能来查找匹配的值。

dt1 = merge(dt1,dt2,by="CODE")

【讨论】:

  • 谢谢!它工作得很好。只是一个简单的问题,合并将适用于具有相同列名的表。如果不是这样,除了很明显的更改为匹配的列名之外,还有什么简单的方法可以做到吗?
  • 如果名称不同,您可以指定要匹配的列。请参阅 ?merge 文档。而不是按=“代码”。你可以指定 by.x = "name_in_df1", by.y = "name_in_df2"
猜你喜欢
  • 1970-01-01
  • 2015-06-07
  • 2022-11-23
  • 1970-01-01
  • 2016-05-31
  • 2021-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多