我有两个关于具有相同ID的相同人口的data.table,一个没有缺失值,而另一个则有几个缺失值。我想将DT1的比率列乘以DT2的数字列。
**DT1**
*ID__ratio*
1__ 0.3
2__ 0.2
3__ 0.4
4__ 0.1
5__ 0.7
6__ 0.3
7__ 0.5
8__ 0.9
9__ 0.1
10_ 0.4
**DT2**
*ID__ number*
1__ NA
2__ NA
3__ 488
4__ NA
5__ NA
6__ 600
7__ 789
8__ 503
9__ NA
10__NA
我已经尝试过match
和ifelse
:
result <- DT1$ratio[match(DT1$ID, DT2$ID)] * DT2$number
result <- ifelse(DT1$ID==DT2$ID, DT1$ratio * DT2$number, NA)
它正在运行,但是我收到以下警告:
longer object length is not a multiple of shorter object length
用于“匹配”和“ ifelse”解决方案。
两者的结果均不正确:存在ID的结果,其中DT2中缺少数字数据,而存在NA的结果中,DT2中具有数字数据。
如果我尝试通过以下代码合并DT1和DT2,那么它将起作用:
merged <- merge(DT1, DT2, key = "ID")
答案 0 :(得分:2)
如果只想返回相乘的向量,就像这样:
require(data.table)
DT1 <- structure(list(ID = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), ratio = c(0.3,
0.2, 0.4, 0.1, 0.7, 0.3, 0.5, 0.9, 0.1, 0.4)), class = "data.frame", row.names = c(NA,
-10L))
DT2 <- structure(list(ID = 1:10, number = c(NA, NA, 488L, NA, NA, 600L,
789L, 503L, NA, NA)), class = "data.frame", row.names = c(NA,
-10L))
setDT(DT1)
setDT(DT2)
DT1$ratio[match(DT2$ID, DT1$ID)] * DT2$number
注意比赛的顺序。