我试图从所有其他列中减去一列,但并非所有列都被修改。
test <- tibble(a = 1:3, b = 2:4, c = 3:5, d = 4:6, e = 5:7)
col = 'd'
test %>% mutate_at(vars(-a), funs(. - !!as.name(col)))
a b c d e
<int> <int> <int> <int> <int>
1 1 -2 -1 0 5
2 2 -2 -1 0 6
3 3 -2 -1 0 7
我不确定为什么该功能未应用于列e。函数似乎仅适用于我要减去的列
col = 'b'
test %>% mutate_at(vars(-a), funs(. - !!as.name(col)))
a b c d e
<int> <int> <int> <int> <int>
1 1 0 3 4 5
2 2 0 4 5 6
3 3 0 5 6 7
当我使用“列表”而不是“ funs”时,我得到相同的行为(尽管我还没有弄清楚如何在“列表”中使用动态变量名)
test %>% mutate_at(vars(-a), list(~. - b))
a b c d e
<int> <int> <int> <int> <int>
1 1 0 3 4 5
2 2 0 4 5 6
3 3 0 5 6 7
让我知道我在这里做错了什么。
我认为最好的方法是先提取所需的值,然后再应用减法。
library(tidyverse)
col = 'd'
vals <- pull(test, {{col}})
test %>% mutate_at(vars(-a), list(~.-vals))
#> # A tibble: 3 x 5
#> a b c d e
#> <int> <int> <int> <int> <int>
#> 1 1 -2 -1 0 1
#> 2 2 -2 -1 0 1
#> 3 3 -2 -1 0 1
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句