在dplyr 0.8.0中使用list()而不是funs()使用新的语法,我希望能够从mutate_at()创建新的变量而不覆盖旧的变量。基本上,我需要在几列中用NA替换值上的所有整数,而不会覆盖这些列。
我已经使用dplyr的早期版本进行了此工作,但是我想适应dplyr中的更改,因此我的代码不会在以后中断。
说我有个小标题:
x <- tibble(id = 1:10, x = sample(1:10, 10, replace = TRUE),
y = sample(1:10, 10, replace = TRUE))
我希望能够用NA替换大于5的任何值。我曾经这样做,结果就是我想要的:
x %>% mutate_at(vars(x, y), funs(RC = replace(., which(. > 5), NA)))
# A tibble: 10 x 5
id x y x_RC y_RC
<int> <int> <int> <int> <int>
1 1 2 3 2 3
2 2 2 1 2 1
3 3 3 4 3 4
4 4 4 4 4 4
5 5 2 9 2 NA
6 6 6 8 NA NA
7 7 10 2 NA 2
8 8 1 3 1 3
9 9 10 1 NA 1
10 10 1 8 1 NA
这是我尝试过的,但是不起作用:
x %>% mutate_at(vars(x, y), list(RC = replace(., which(. > 5), NA)))
[<-.data.frame
(*tmp*
,列表中的错误,值= NA): 新列将在现有列之后留下空白
这有效,但是替换了原始变量:
x %>% mutate_at(vars(x, y), list(~replace(., which(. > 5), NA)))
# A tibble: 10 x 3
id x y
<int> <int> <int>
1 1 2 3
2 2 2 1
3 3 3 4
4 4 4 4
5 5 2 NA
6 6 NA NA
7 7 NA 2
8 8 1 3
9 9 NA 1
10 10 1 NA
感谢您的帮助!
答案 0 :(得分:2)
几乎在这里,只需创建一个命名列表即可。
x %>% mutate_at(vars(x, y), list(RC = ~replace(., which(. > 5), NA)))