r - 根据给定条件改变多个变量
问题描述
我有以下数据:
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', .)))
然而,这并不完全奏效。
解决方案
您走在正确的道路上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', .))
也可以完成这项工作。
推荐阅读
- android - 如何传递继承Kotlin中另一个类的不同类的可变参数?
- java - 如何使用 OpenCV 检测停车标志?
- javascript - 在 Angular 项目中导入 2 个同名的 JavaScript 函数
- ios - 在 Scenekit 中使用网格线打开遮挡
- javascript - 在道具从 redux 操作更改后,React 类组件不会重新渲染
- oracle - 如何在具有某些首字母的新表中插入所有行(pl/sql)
- sql - 如何替换 CLOB 列中的 TAB 字符?
- sql - 我正在尝试更新一列中的多个值
- android - 如何在bottomNavingationView(footer)中放大android中添加的矢量资产
- jenkins - 在 Jenkins 矩阵作业的后期构建中使用 ssh 凭据