r - 多列条件合并

标签 r merge data.table reshape melt

我有两个数据表。我想将第二个 data.table 中的信息与第一个数据合并:

DT1 <- fread(
"Val C   D  E   F   iso   year   
1    NA  1  NA  NA  NLD   2001
1    NA  2  NA  NA  NLD   2002       
1    NA  3  NA  NA  GRC   2001             
1    NA  3  NA  NA  GRC   2002",
header = TRUE)

DT2 <- fread(
"Val name  O   P  Q   R   iso   year   
1   A     NA  1  NA  NA  NLD   2001
1   A     NA  2  NA  NA  NLD   2001   
1   B     NA  1  NA  NA  NLD   2001
1   B     NA  2  NA  NA  NLD   2002
1   A     NA  1  NA  NA  NLD   2002
1   B     NA  2  NA  NA  NLD   2002         
1   C     NA  3  NA  NA  GRC   2001  
1   C     NA  3  NA  NA  GRC   2001
1   C     NA  3  NA  NA  GRC   2001        
1   A     NA  3  NA  NA  GRC   2002
1   A     NA  3  NA  NA  GRC   2002          
1   B     NA  3  NA  NA  GRC   2002",
header = TRUE)

我想将DT2name下的信息添加到DT1,如下所示。如果对于 iso == NLD 名称 A 存在(无论多久一次),则 A 列将填充为 A,如果不存在,则保留不适用:

DT1 <- fread(
"Val    C   D  E   F   iso   year   A B C
 1      NA  1  NA  NA  NLD   2001   A B NA
 1      NA  2  NA  NA  NLD   2002   A B NA   
 1      NA  3  NA  NA  GRC   2001   NA NA C         
 1      NA  3  NA  NA  GRC   2002   A B NA",
header = TRUE)

但是我不知道怎么去那里。我一直在尝试类似的事情:

DT[,A:="A"]
DT[,B:="B"]
DT[,C:="C"]
DT2$name[DT, on=c(iso="iso", year="year", name="A"), nomatch=0L]

merge(DT, DT2$name, on=c(iso="iso", year="year", A="name"), all.x = TRUE, allow.cartesian=FALSE)

但我认为必须以不同的方式解决它。有人可以帮我吗?

最佳答案

在合并之前 reshape DT2,如下所示。我们还需要一步将计数更改为 A、B、C:

merge(DT1, dcast(DT2[, -c(3:6)], iso + year + Val ~ name),
      by = c("iso", "year", "Val"))
# Using 'year' as value column. Use 'value.var' to override
# Aggregate function missing, defaulting to 'length'
#    iso year Val C.x D  E  F A B C.y
# 1: GRC 2001   1  NA 3 NA NA 0 0   3
# 2: GRC 2002   1  NA 3 NA NA 2 1   0
# 3: NLD 2001   1  NA 1 NA NA 2 1   0
# 4: NLD 2002   1  NA 2 NA NA 1 2   0

关于r - 多列条件合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58858135/

相关文章:

r - 使用ggplot突出周末?

r - 在每组/ggplot2 等价的类型 ="o"的线前绘制点

ios - 更改assetVideoTrack的preferredTransform以解决合并视频时的镜像问题

r - 将数据框从长格式转换为宽格式后,日期变量错误地转换为数字变量

引用之前的观察并将字符串与 R 中的条件连接起来

java - 使用 JRI 赋值时出现奇怪的行为

R:转换为与 case_when 相同的级别顺序的因子

mysql - 如何在 SQL 中更新以获得不同的元组/不违反唯一约束

python-3.x - pandas df merge 避免重复的列名

删除 data.table 中的所有重复项,添加带有标识符列表的列