gpt4 book ai didi

r - 比较 R data.table 中多列值的向量

转载 作者:行者123 更新时间:2023-12-02 04:09:26 26 4
gpt4 key购买 nike

在以下示例中:

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 的行序列进行分组,取消列出“A”列,检查所有这些元素是否%in % 未列出的“B”列。

 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))]

关于r - 比较 R data.table 中多列值的向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37568330/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com