首页 > 解决方案 > 根据给定条件改变多个变量

问题描述

我有以下数据:

  library(dplyr)

     d <- data_frame(
      region = c('all', 'nj', 'rkl', 'all'),
      figures= c(5, 7, 4, 8),
      figures2 = c(3, 5, 6, 7))

我想用 dplyr 说当 'region' = 'all' 然后把 'figures' 和 'figures2' 变成 'x'。我不想使用 mutate 来创建新变量,我想更改已经存在的变量中的值。所以数据看起来像这样:

  d2 <- data_frame(
          region = c('all', 'nj', 'rkl', 'all'),
          figures= c(x, 7, 4, x),
          figures2 = c(x, 5, 6, x))

我想我需要这样的东西:

 d %>% mutate_at(vars(1:3), funs(ifelse(region = 'all', 'x', .)))

然而,这并不完全奏效。

标签: rdplyr

解决方案


您走在正确的道路上mutate_at

d %>% 
  mutate_at(vars(2:3), list(~ ifelse(region == 'all', 'x', .)))

输出:

# A tibble: 4 x 3
  region figures figures2
  <chr>  <chr>   <chr>   
1 all    x       x       
2 nj     7       5       
3 rkl    4       6       
4 all    x       x   

如果需要,您可以'x'用数字替换。

编辑

  • 我也认为这replace是一个更好的选择,你也可以这样做d %>% mutate_at(vars(2:3), list(~ replace(., region == 'all', 'x')))
  • 此外,正如@Moody_Mudskipper 所指出的,不需要list最新dplyr版本,因此mutate_at(2:3, ~ ifelse(region == 'all', 'x', .))也可以完成这项工作。

推荐阅读