r语言 - 如何在dplyr中使用purrr映射中的动态变量



我有以下数据,看起来像这样:

tibble(
name = paste0("segment",1),
data = list(tibble(segment1 = 1:5, check = 99))
)
# A tibble: 1 x 2
name     data            
<chr>    <list>          
1 segment1 <tibble [5 x 2]>

我想映射嵌套的数据,并希望在dplyr中使用一个变量(name)。如果在列名segment12大于66,否则使用columnsegment1中的值

tibble(
name = paste0("segment",1),
data = list(tibble(segment1 = 1:5, check = 99))
) %>% 

mutate(testing = map2(.x = name, .y = data, 
~ .y %>% 
mutate(testing = ifelse((!!.x) == 2, 66, (!!.x))))) 

未嵌套的测试标题应该是这样的:

# A tibble: 5 x 3
segment1 check testing
<int> <dbl>   <dbl>
1        1    99       1
2        2    99      66
3        3    99       3
4        4    99       4
5        5    99       5

但是我总是得到。x找不到的错误。

.x已经用于map2,最好使用匿名函数来明确哪个变量引用了什么。

使用字符串变量作为列名称.data代词应该工作,但我很惊讶它在这里不起作用(或者我没有正确使用它)。另一种选择是使用get

library(dplyr)
library(purrr)
tibble(
name = paste0("segment",1),
data = list(tibble(segment1 = 1:5, check = 99))
) %>%
mutate(testing = map2(name, data, function(p, q) {
q %>% mutate(testing = ifelse(get(p) == 2, 66, get(p)))
})) 
#   name     data             testing         
#  <chr>    <list>           <list>          
#1 segment1 <tibble [5 × 2]> <tibble [5 × 3]>

其中testing列的数据为

# A tibble: 5 x 3
#  segment1 check testing
#     <int> <dbl>   <dbl>
#1        1    99       1
#2        2    99      66
#3        3    99       3
#4        4    99       4
#5        5    99       5

最新更新