Как проверить значение столбца является членом другого столбца типа списка того же Tibble в R? - PullRequest
2 голосов
/ 06 октября 2019

Тиббл содержит список в виде столбца (здесь столбец с именем Imgs), и я хочу проверить, являются ли значения в другом столбце (здесь Img) членами этого столбца (Imgs).

Я пробовал с mutate(In = ifelse(Img %in% Imgs[[1]], TRUE, FALSE)), но все они проверили с первым рядом Imgs. Как видите, Imgs варьируется в зависимости от Condition.

data

Ответы [ 2 ]

2 голосов
/ 06 октября 2019

В базе R мы можем использовать mapply / Map

df$In <- mapply(function(x, y) any(x %in% y), df$IMG, df$Imgs)
df
#  Condition IMG       Imgs    In
#1       CHR  14 13, 19, 14  TRUE
#2       CHR   2 13, 19, 14 FALSE
#3       CHR  13 13, 19, 14  TRUE

Или map2_lgl в purrr

library(dplyr)
library(purrr)

df %>% mutate(In = map2_lgl(IMG,Imgs, ~any(.x %in% .y)))

Протестировано на данных этого образца:

df <- data.frame(Condition = rep("CHR", 3), IMG = c(14, 2, 13))
df$Imgs <- list(c(13, 19, 14))
1 голос
/ 06 октября 2019

Мы можем использовать data.table

library(data.table)
setDT(df)[, In := unlist(Map(`%in%`, IMG, Imgs))][]
#   Condition IMG     Imgs    In
#1:       CHR  14 13,19,14  TRUE
#2:       CHR   2 13,19,14 FALSE
#3:       CHR  13 13,19,14  TRUE
...