R-用dplyr中的特定值替换变量

时间:2019-04-30 15:07:54

标签: r dplyr mutate

假设我要在数据集中将多个变量替换为1:

data(iris)

put_1 <- function(x){ x = 1}

iris %>% 
   mutate_at(vars(Petal.Length, Petal.Width), funs(put_1)) %>% 
   head()
#   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1          5.1         3.5            1           1  setosa
# 2          4.9         3.0            1           1  setosa
# 3          4.7         3.2            1           1  setosa
# 4          4.6         3.1            1           1  setosa
# 5          5.0         3.6            1           1  setosa
# 6          5.4         3.9            1           1  setosa

问题:有没有一种方法可以在不声明函数的情况下做同样的事情?

我尝试过类似的事情:

  • mutate_at(vars(...), funs(function(x){ x <- 1 }))

  • mutate_at(vars(...), funs(~ 1 }))

  • mutate_at(vars(...), funs(~ . = 1 }))

没有成功。

谢谢。

2 个答案:

答案 0 :(得分:0)

这是=<-工作不同的情况之一

> iris%>%mutate_at(vars(Petal.Length,Petal.Width),funs(.<-1))%>%head()
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5            1           1  setosa
2          4.9         3.0            1           1  setosa
3          4.7         3.2            1           1  setosa
4          4.6         3.1            1           1  setosa
5          5.0         3.6            1           1  setosa
6          5.4         3.9            1           1  setosa

> iris%>%mutate_at(vars(Petal.Length,Petal.Width),funs(.=1))%>%head()
Error: Can't create call to non-callable object
Call `rlang::last_error()` to see a backtrace

答案 1 :(得分:0)

最佳答案来自 @josemz

iris %>% 
   mutate_at(vars(Petal.Length, Petal.Width), ~ 1)