检查R中的列表列中是否存在值

zy1mlcev  于 2023-02-10  发布在  其他
关注(0)|答案(2)|浏览(139)

我有点困惑为什么%in%在比较列表列中的值时不起作用。我有一个 Dataframe ,如下所示:

| A | B | 
| --- | --- | 
| '1' | c('1', '3', '9') | 
| '2' | c('1', '2', '5') | 
| '3' | c('4', '5') | 
| '4' | c('1', '2', '5') | 
| '5' | c('1', '2', '5') |

并且我想添加列C,该列显示A是否存在于B中。当我尝试执行以下操作时(假设上面的 Dataframe 称为df)

df %>% mutate(C = ifelse(A %in% B, 1, 0))

我明白了

| A | B | C |
 | --- | --- | --- | 
| '1' | c('1', '3', '9') | 0 | 
| '2' | c('1', '2', '5') | 0 | 
| '3' | c('4', '5') | 0 | 
| '4' | c('1', '2', '5') | 0 | 
| '5' | c('1', '2', '5') | 0 |

我想要的是:

| A | B | C |
 | --- | --- | --- | 
| '1' | c('1', '3', '9') | 1 | 
| '2' | c('1', '2', '5') | 1 | 
| '3' | c('4', '5') | 0 | 
| '4' | c('1', '2', '5') | 0 | 
| '5' | c('1', '2', '5') | 1 |

为什么我会得到我所得到的结果,我如何才能绕过它?
我也尝试了is.element()而不是%in%,但结果是一样的。
任何帮助都很感激。

yhxst69z

yhxst69z1#

如果您使用rowwise(),它将工作:

library(dplyr)
tib <- tibble(A = 1:5, 
       B = list(c(1,3,9), c(1,2,5), c(4,5), c(1,2,5), c(1,2,5)))
tib %>% 
  rowwise() %>% 
  mutate(C = as.numeric(A %in% B))
#> # A tibble: 5 × 3
#> # Rowwise: 
#>       A B             C
#>   <int> <list>    <dbl>
#> 1     1 <dbl [3]>     1
#> 2     2 <dbl [3]>     1
#> 3     3 <dbl [2]>     0
#> 4     4 <dbl [3]>     0
#> 5     5 <dbl [3]>     1

reprex package(v2.0.1)于2023年2月8日创建

dauxcl2d

dauxcl2d2#

我们可以使用

library(dplyr)
library(purrr)
df1 %>%
    mutate(C = +(map2_lgl(A, B, ~ .x %in% .y)))

相关问题