【发布时间】:2018-07-23 13:24:55
【问题描述】:
我有一个 tibble tib 如下:
A B C D
<chr> <chr> <chr> <chr>
1 X123 X456 K234 V333
2 X456 Z000 L888 B323
3 X789 ZZZZ D345 O999
4 M111 M111 M111 M111
.
.
.
(5000 rows)
我还有一个向量如下:
> vec <- c("X123","X456")
> vec
[1] "X123" "X456"
我正在寻找一种方法来搜索并在小标题的右侧添加一个逻辑列(例如 5000 行),它是 TRUE 或 FALSE,具体取决于是否有任何值tib 中的列中包含 vec 中的值。我的目标输出如下:
A B C D lgl
<chr> <chr> <chr> <chr> <lgl>
1 X123 X456 K234 V333 TRUE
2 X456 Z000 L888 B323 TRUE
3 X789 ZZZZ D345 O999 FALSE
4 M111 M111 M111 M111 FALSE
我有以下:
> tib %>%
+ pmap_lgl(~any(..1 %in% vec))
[1] TRUE TRUE FALSE FALSE
这得到了我正在寻找的结果,但我对syntax 有点困惑。
为什么上述方法有效(即使用..1),而不是必须使用..1、..2、..3 和..4?我的理解是pmap 根据输入行生成一个向量,所以我假设上面的..1 表示第1 行的向量c("X123","X456","K234","V333"),第2 行的c("X456","Z000","L888","B323") 等。
最后,我有两个问题:
- 如何将这个新的逻辑向量附加到上面的
tib?我没有运气:
tib %>% mutate(lgl = pmap_lgl(~any(..1 %in% vec)))
Error in mutate_impl(.data, dots): Evaluation error: argument ".f" is missing, with no default.
- 如果我要观察访问每一行中的每一列(例如,pmap 中第一行的“X123”),我将如何在
purrr的语法中做到这一点?
【问题讨论】: