gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:07:05 25 4
gpt4 key购买 nike

如果我有这样的数据框

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com