r - mutate_at - 涉及两个变量的函数

标签 r dplyr

如果我有这样的数据框

set.seed(1)    
df <- data.frame(X = 5:14,
       Y = runif(10,0,1),
       Z = runif(10,0,1))

我可以

df %>% mutate(Y = if_else(X > 10, -Y, Y),
              Z = if_else(X > 10, -Z, Z))

但是如果我有很多变量要以相同的方式进行转换,我更喜欢使用 mutate_at。但是,在这种情况下我无法正常工作。

我的尝试:

testfun <- function(y){if_else(X > 10, -y, y)}
df %>% mutate_at(vars(c("Y","Z")),funs(testfun))

但这会导致 Evaluation error: object 'X' not found。我尝试了像 get("X") 这样的变体,但它没有用。有谁知道有效的变体?

最佳答案

这是使用 mutate_at 的简单方法:

library(dplyr)
df %>% 
  mutate_at(vars(Y,Z), funs(if_else(X > 10, -., .)))

#     X           Y          Z
# 1   5  0.26550866  0.2059746
# 2   6  0.37212390  0.1765568
# 3   7  0.57285336  0.6870228
# 4   8  0.90820779  0.3841037
# 5   9  0.20168193  0.7698414
# 6  10  0.89838968  0.4976992
# 7  11 -0.94467527 -0.7176185
# 8  12 -0.66079779 -0.9919061
# 9  13 -0.62911404 -0.3800352
# 10 14 -0.06178627 -0.7774452

可重现的数据:

set.seed(1)
df <- data.frame(X = 5:14,
                 Y = runif(10,0,1),
                 Z = runif(10,0,1))

关于r - mutate_at - 涉及两个变量的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50927397/

相关文章:

R字符串,UTF-8编码瑞典字符处理

r - 计算一个向量中出现在另一个向量中的元素的出现次数

r - 将邻接表转换为 R 中的二进制矩阵

r - 计算不同的行并聚合

r - 在 R 和 Sparklyr 中,将表写入 .CSV (spark_write_csv) 会生成许多文件,而不是一个文件。为什么?我可以改变这一点吗?

R dplyr 用第一个非 "missing"值替换 -"missing"列数据

r - 自动创建 person 的 "age at event"变量的过程

r - dplyr 总结 : create variables from named vector

r - 更改 Hmisc summary() 返回的摘要变量

在R中重复某个值,不同的次数