簡體   English   中英

如何將字符向量與R中的tibble中的字符向量列表進行匹配?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM