通过匹配第二个data.table

时间:2018-03-25 16:23:32

标签: r data.table

我正在尝试使用来自第二个character的数据从一个paste的列中执行data.table操作(data.table)。

由于我还在此特定代码之前和之后执行其他不相关的合并操作,因此行顺序可能会更改,因此我当前正在设置此操作之前和之后的顺序。

DT1 <- data.table(ID = c("a", "b", "c"), N = c(4,1,3)) # N used
DT2 <- data.table(ID = c("b","a","c"), N = c(10,10, 15)) # N total

# without merge
DT1 <- DT1[order(ID)]
DT2 <- DT2[order(ID)]
DT1[, N := paste0(N, "/", DT2$N)]
DT1
# ID    N
# 1:  a 4/10
# 2:  b 1/10
# 3:  c 3/15

我知道两个DT中的merge(根据定义)会处理匹配,但这会创建额外的列,我需要在之后删除。

# using merge
DT1 <- merge(DT1, DT2, by = "ID")
DT1[, N := paste0(N.x, "/", N.y)]
DT1[, c("N.x", "N.y") := list(NULL, NULL)]

DT1
# ID    N
# 1:  a 4/10
# 2:  b 1/10
# 3:  c 3/15

使用data.table吗?

是否有更聪明的方法?

1 个答案:

答案 0 :(得分:2)

我们可以在转换&#39; N&#39;之后使用join列到character

DT1[DT2, N := paste0(N, "/", i.N), on = .(ID)]
DT1
#  ID    N
#1:  a 4/10
#2:  b 1/10
#3:  c 3/15

数据

DT1 <- data.table(ID = c("a", "b", "c"), N = c(4,1,3))
DT2 <- data.table(ID = c("b","a","c"), N = c(10,10, 15)) # N total
DT1[, N:= as.character(N)]