В следующем примере:Сравнивая векторы нескольких значений столбцов в 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))
Я хочу проверить для каждой строки, является ли значение в столбце А1 и А2, как происходит в любом В1, В2 или В3 ,
Если я:
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
Хотя я бы ожидать, правда на 1-й строки и Ложные для 2-го ряда.
# 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)
, не будет хорошим решением.
Почему downvote? Пожалуйста, предоставьте отзыв, если вы это сделаете. –
Я думаю, что решение в конце концов на самом деле довольно эффективно. Вам нужно только создать выражение программно, если у вас много столбцов. – Roland
Хорошо, попробуй, спасибо –