mutate_if、跨或 map_if 想要处理以另一个字段中的值为条件的迭代
mutate_if, across or map_if where want to process the iteration conditional on value in another field
简单示例:
mydf <- data.frame(
x = 1:3,
y = c(1, 0, 1),
z = 1:3
) %>% group_by(x) %>% nest
mydf %>% mutate(blah = map_dbl(.x = data, ~ .x$z * 2))
Returns:
# A tibble: 3 x 3
# Groups: x [3]
x data blah
<int> <list> <dbl>
1 1 <tibble [1 × 2]> 2
2 2 <tibble [1 × 2]> 4
3 3 <tibble [1 × 2]> 6
我想以 y 为条件进行变异或映射。 If y=1, then process with .x * 2 else (y = 0) then just use NA.
想要的结果:
# A tibble: 3 x 3
# Groups: x [3]
x data blah
<int> <list> <dbl>
1 1 <tibble [1 × 2]> 2
2 2 <tibble [1 × 2]> NA
3 3 <tibble [1 × 2]> 6
我应该使用 mutate_if、mutate_across、map_if 吗?我怎样才能得到这个结果?
如果 OP 需要在其实际用例中保留 map
模型,map2()
是一种可能性...
mydf %>% mutate(blah = map2(x, y, ~ifelse(.y == 1, .x * 2, NA)))
x y blah
1 1 1 2
2 2 0 NA
3 3 1 6
简单示例:
mydf <- data.frame(
x = 1:3,
y = c(1, 0, 1),
z = 1:3
) %>% group_by(x) %>% nest
mydf %>% mutate(blah = map_dbl(.x = data, ~ .x$z * 2))
Returns:
# A tibble: 3 x 3
# Groups: x [3]
x data blah
<int> <list> <dbl>
1 1 <tibble [1 × 2]> 2
2 2 <tibble [1 × 2]> 4
3 3 <tibble [1 × 2]> 6
我想以 y 为条件进行变异或映射。 If y=1, then process with .x * 2 else (y = 0) then just use NA.
想要的结果:
# A tibble: 3 x 3
# Groups: x [3]
x data blah
<int> <list> <dbl>
1 1 <tibble [1 × 2]> 2
2 2 <tibble [1 × 2]> NA
3 3 <tibble [1 × 2]> 6
我应该使用 mutate_if、mutate_across、map_if 吗?我怎样才能得到这个结果?
如果 OP 需要在其实际用例中保留 map
模型,map2()
是一种可能性...
mydf %>% mutate(blah = map2(x, y, ~ifelse(.y == 1, .x * 2, NA)))
x y blah
1 1 1 2
2 2 0 NA
3 3 1 6