我有以下数据,看起来像这样:
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