使用mutate_each分配常量

时间:2016-07-20 15:48:50

标签: r dplyr

我想将几列中的所有值都设置为NA。通常,如果我想使用相同的算法修改多个列,我会使用dplyr中的mutate_each。从算法的角度来看,函数" 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

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

mutate_each(funs(function(x) {NA}), Address, City, State, Zip)

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

1 个答案:

答案 0 :(得分:5)

只是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

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