我在使用列表列作为LHS dplyr::case_when()的输入时遇到了问题.

library("dplyr")
library("tibble")
library("purrr")

# create a tibble and add a list column
tbl = tibble(a = c(1,2,3))
(b = list(c(1,7,8), c(1,7,8),c(1,2,3)))
#> [[1]]
#> [1] 1 7 8
#> 
#> [[2]]
#> [1] 1 7 8
#> 
#> [[3]]
#> [1] 1 2 3
tbl$b = b

我想要一个新列,标识tbl$a中的每个值是否在列表列tbl$b中相同观察的值的载体中.

当我try 这个时,我得到了c(0,0,0),但我期待的是c(1,0,1).

tbl %>% mutate(a_in_b = case_when(a %in% b ~ 1,
                                  TRUE ~ 0))
#> # A tibble: 3 × 3
#>       a b         a_in_b
#>   <dbl> <list>     <dbl>
#> 1     1 <dbl [3]>      0
#> 2     2 <dbl [3]>      0
#> 3     3 <dbl [3]>      0

我不确定这是否相关,但这些也会给出不同的结果,原因我不清楚:

tbl$a[1] %in% tbl$b[1] # evaluates as FALSE
tbl$a[1] %in% tbl$b[[1]] # evaluates as TRUE

我可以使用map2()-方法,例如

map2(tbl$a, tbl$b, \(x,y) x %in% y) # this works

然而,我的现实世界数据有多个列表列,并且 map 方法似乎变得过于复杂.

推荐答案

按行使用,然后就直接向前.

library(dplyr)

tbl %>%
  rowwise %>%
  mutate(a_in_b = +(a %in% b)) %>%
  ungroup

# A tibble: 3 × 3
      a b          a_in_b
  <dbl> <list>      <int>
1     1 <dbl [3]>       1
2     2 <dbl [3]>       0
3     3 <dbl [3]>       1

R相关问答推荐

如何删除字符串中重复的字符序列?

使用long()在dØr中过滤后获取元素数量

R -列表元素中所有命名项的总和

在处理因素时,Base R grep家族比stringr变体快得多

如何在ggplot 2 geom_segment图表中将UTC转换为EET?

如何根据条件计算时差(天)

有没有一个R函数允许你从一个数字变量中提取一个数字,而不考虑它的位置(不仅仅是第一个或最后一个数字?

IMF IFS数据以R表示

如何计算多个日期是否在一个日期范围内

如果可能,将数字列转换为整数,否则保留为数字

从外部文件读取多个值作为字符向量

悬崖三角洲超大型群数计算导致整数溢出

根据列表中项目的名称合并数据框和列表

查找所有站点的最小值

如何使这些react 表对象相互独立?

R中的类别比较

如何使用For-R循环在向量中找到一系列数字

通过初始的shiny 应用更新部署的shiny 应用的数据和参数,其中部署的应用程序显示为URL

`-`是否也用于数据帧,有时使用引用调用?

如何根据未知数的多列排除重复行