我有两个地图/ data.tables。一个由键值组成,另一个仅由一些键组成。我想将第一个地图的值映射到第二个地图的键上。如何完成这个任务?
以下是一些示例代码:
map1<-data.table( k=c("A","B"), v=c(2,3) )
map2<-data.table( k2=c("A","B","A","A"))
我该如何在map2中生成一个包含c(2,3,2,2)的新列v2?
我有两个地图/ data.tables。一个由键值组成,另一个仅由一些键组成。我想将第一个地图的值映射到第二个地图的键上。如何完成这个任务?
以下是一些示例代码:
map1<-data.table( k=c("A","B"), v=c(2,3) )
map2<-data.table( k2=c("A","B","A","A"))
使用 data.table 进行连接操作:
map1[map2, v, on = c(k = "k2")]
#[1] 2 3 2 2
map2[map1, v2 := v, on = c(k2 = "k")]
# k2 v2
#1: A 2
#2: B 3
#3: A 2
#4: A 2
试试使用基本R
map2$v2 <- map1$v[match(map2$k2,map1$k)]
你也可以这样做。虽然不太优雅,但我觉得更直观:
map2 = merge(
x = map2,
y = map1,
by.x = 'k2',
by.y = 'k',
all.x = T
)
setnames(map2, old = c('v'), new = c('v2')