使用mutate_each分配常量

Dav*_*ein 2 r dplyr

我想将几列中的所有值都设置为NA.通常,如果我想使用相同的算法修改几个列,我将使用mutate_eachdplyr.从算法的角度来看,函数"x映射到null"似乎非常明确,所以我试着这样做.但是,我收到了一个错误:Error in make_call(x$expr, args) : Unknown inputs.

最小可重复的例子:

sample <- data.frame(a = seq(1, 3), b = seq(5, 7))

sample %>% mutate(a = 1, b = 1)           # Works fine
sample %>% mutate_each(funs(. - 1), a, b) # Works fine
sample %>% mutate_each(funs(1), a, b)     # Blows up
sample %>% mutate_each(funs(NA), a, b)    # Blows up
Run Code Online (Sandbox Code Playgroud)

我也试过明确定义一个函数,例如

mutate_each(funs(function(x) {NA}), Address, City, State, Zip)
Run Code Online (Sandbox Code Playgroud)

这会导致不同的错误:Error: Unsupported type CLOSXP for column "a".这样做的正确方法是什么?

age*_*nis 5

just 1不是函数名(参见mutate_each的帮助页面).你必须使用括号; 这将工作:

sample %>% mutate_each(funs({1}), a, b) 
####   a b
#### 1 1 1
#### 2 1 1
#### 3 1 1
sample %>% mutate_each(funs({NA}), a, b)
####   a  b
#### 1 NA NA
#### 2 NA NA
#### 3 NA NA
Run Code Online (Sandbox Code Playgroud)

这将把一切都变成NA或者.但是,如果您在data.frame中有NA并且您希望保持原样,那该怎么办?在这种情况下,@ MichaelCirico建议的解决方案(在评论中)可行.

  • 有意义--R正在寻找一个名为"1"的函数,并且很简单......时髦,有一个简单的解决方案(`{}`),尽管可能有更好的错误信息. (2认同)