[英]How do I match a character vector to a list of character vectors in a tibble in R?
我想比較一個tibble中的列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或者申請。 我不確定我是否應該分組或嵌套或拆分,並且有很多組合。
您可以使用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
我們可以使用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
注意:@ kath的map2
方法會更快
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]))
還有一個應用解決方案的dplyr版本。
my.tibble %>% mutate(its.in.it = . %in% unlist(my.tibble$my.list))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.