【问题标题】:Assigning a constant with mutate_each使用 mutate_each 分配一个常量
【发布时间】:2016-07-21 00:08:30
【问题描述】:

我想将几列中每一列的所有值设置为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"。这样做的正确方法是什么?

【问题讨论】:

  • 胶带:sample %&gt;% mutate_each(funs(.*0 + NA), a, b)
  • @MichaelChirico 确实,这种解决方法也很好:funs(.*0+1)funs(.+NA)。注意:如果数据中有 NA,它不会将它们变成 NA(见我的帖子)

标签: r dplyr


【解决方案1】:

只是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 并且您想保持它们原样怎么办?在这种情况下,@MichaelChirico(在 cmets 中)建议的解决方案有效。

【讨论】:

  • 谢谢!我的印象是(c/o “Advanced R” by Wickham)一切都是 R 中的函数。我猜“几乎一切”是正确的想法。
  • 说得通——R 正在寻找一个名为 1 的函数,但结果很短......很时髦,有一个简单的解决方案 ({}),尽管可能会有更好的错误消息.
猜你喜欢
  • 1970-01-01
  • 2014-09-10
  • 2021-05-01
  • 1970-01-01
  • 2012-10-10
  • 1970-01-01
  • 1970-01-01
  • 2018-07-11
  • 2018-05-27
相关资源
最近更新 更多