我有以下data.tables:data.table参考列的名字
Comparison <- data.table(code = c("AAA", "BBB"),
elem1 = c(1, 2),
elem2 = c(4, 4))
DT <- data.table(A = c("AAA", "AAA", "AAA", "AAA"),
B = c("BBB", "BBB", "BBB", "BBB"),
C = c(1, 2, 3, 4))
现在,我想从Comparison
添加基于列的比较新的列和从DT
。下面的命令生成所期望的输出:
DT[, newCol := {ifelse(abs(C - Comparison[code == "AAA", elem2]) == 0, "0", "1")}]
Output:
A B C newCol
1: AAA BBB 1 1
2: AAA BBB 2 1
3: AAA BBB 3 1
4: AAA BBB 4 0
然而,如果不是硬编码列A
的列值,我使用了柱本身与此:
DT[, newCol := {ifelse(abs(C - Comparison[code == A, elem2]) > 0, "0", "1")}]
它输出以下错误,这我不知道如何避免:
Error in `[.data.table`(Comparison, code == A, elem2) :
RHS of == is length 4 which is not 1 or nrow (2). For robustness, no recycling is allowed (other than of length 1 RHS). Consider %in% instead.
在我看来,该操作未矢量化的列元素A
Ø f DT
in Comparison
,我不太明白为什么,因为C
列的元素是正确的(即,它单独使用C
的元素,但不使用A
的元素)。我怎么能做这个比较?
任何帮助将不胜感激。