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