簡體   English   中英

比較R data.table中多列值的向量

[英]Comparing vectors of multiple column values in R data.table

在以下示例中:

DT <- data.table(A1=c(1,2),A2=c(2,3),B1=c(1,2),B2=c(3,4),B3=c(2,5))

我想檢查每一行是否A1和A2列中的值都出現在B1,B2或B3中。

如果我做:

DT[,BOTH_PRESENT:=!(F %in% (c(A1,A2) %in% c(B1,B2,B3)))]

這會產生:

   A1 A2 B1 B2 B3 BOTH_PRESENT
1:  1  2  1  3  2         TRUE
2:  2  3  2  4  5         TRUE

雖然我希望第一行為True而第二行為False。

# Row 1
!(F %in% (c(1,2) %in% c(1,3,2)))
# Row 2
!(F %in% (c(2,3) %in% c(2,4,5)))

我該如何更改代碼?

由於我的真實數據集在制作像(A1 == B1 | A1 == B2 | A1 == B3) & (A2 == B1 | A2 == B2 | A2 == B3)等表達式的列方面要大得多是個很好的解決方案。

我們可以按data.table的行序列進行分組, unlist 'A'列,檢查all這些元素是否為%in% unlist '列。

 DT[, BOTH_PRESENT := all(unlist(.SD[, 1:2, with = FALSE]) %in% 
        unlist(.SD[, 3:5, with = FALSE])), by = 1:nrow(DT)]

或者@Roland提到的,

 DT[,BOTH_PRESENT:= all(c(A1, A2) %in% c(B1,B2,B3)), by = seq_len(nrow(DT))]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM