我想将小列中的A列与B列进行比较,以查看B列中是否存在A列中的元素。A列是字符向量。 B列是字符向量的列表。我想一行一行地做。我可以循环执行此操作。
library(tidyverse)
my.tibble = c('a','b','c') %>% tibble
my.list = list(c('a','b'),c('b','c'),c('d','e'))
my.tibble = my.tibble %>% add_column(my.list)
its.in.it = as.list(NULL)
for (i in 1:nrow(my.tibble)){
its.in.it[[i]] = my.tibble[i,1] %in% unlist(my.tibble[i,2])
}
my.tibble$its.in.it = unlist(its.in.it)
my.tibble
我正在尝试使用dplyr / purrr或申请。我不确定是否应该分组,嵌套或拆分,并且组合很多。
答案 0 :(得分:5)
您可以使用map2_lgl
来获取两个输入,然后对它们进行循环并返回逻辑向量。
names(my.tibble) <- c("char", "char.list")
my.tibble %>%
mutate(its.in.it = map2_lgl(char, char.list, ~ .x %in% .y))
# A tibble: 3 x 3
# char char.list its.in.it
# <chr> <list> <lgl>
# 1 a <chr [2]> TRUE
# 2 b <chr [2]> TRUE
# 3 c <chr [2]> FALSE
答案 1 :(得分:4)
我们可以使用rowwise
library(tidyverse)
names(my.tibble) <- LETTERS[1:2]
my.tibble %>%
rowwise() %>%
mutate(itsinit = A %in% unlist(B))
# A tibble: 3 x 3
# A B itsinit
# <chr> <list> <lgl>
#1 a <chr [2]> TRUE
#2 b <chr [2]> TRUE
#3 c <chr [2]> FALSE
注意:使用map2
的@kath方法会更快
答案 2 :(得分:3)
使用apply
会是这样:
apply(my.tibble, 1, function(x) x[1] %in% unlist(x[2]))
#[1] TRUE TRUE FALSE
my.tibble$its.in.it <- apply(my.tibble, 1, function(x) x[1] %in% unlist(x[2]))
答案 3 :(得分:1)
还有解决方案的dplyr版本。
my.tibble %>% mutate(its.in.it = . %in% unlist(my.tibble$my.list))