我想使用mutate_all()遍历data.frame的所有列,然后使用ifelse()有选择地更改值。

testdf <- data.frame("a"=c(1,2,3), "b"=c(4,5,6), "c"=c(7,8,9))

mutate_all(testdf, ifelse(.>9,10,.))

但这是行不通的。我总是得到“对象”。未找到”。如何引用通过mutate_all()函数传递的各个值?我以为。那样工作吗?这有效:
mutate_all(testdf, funs(.*2))

最佳答案

尝试以下任何一种方法:

testdf %>% mutate_all(function(x) ifelse(x>9,10,x))

testdf %>% mutate_all(funs(ifelse(.>9,10,.)))

testdf %>% mutate_all(testdf, ~ifelse(.>9,10,.))

testdf %>% mutate_all(~ pmin(., 10))

testdf %>% mutate_all(pmin, 10)

testdf %>% mutate_all(~ replace(., . > 9, 10))

testdf %>% replace(. > 9, 10)
最后两个是Ronak Shah在下面的评论。
更新
自从提出此问题以来,dplyr 1.0.0出现了,并引入了一个新的across函数,该函数与mutate一起使用,现在比mutate_ *函数更受青睐。
testdf %>% mutate(across(, ~ pmin(., 10)))

关于r - 如何结合mutate_all和ifelse,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53735470/

10-12 16:42