【问题标题】:Unexpected "=" in mutate statementmutate 语句中出现意外的“=”
【发布时间】:2017-12-04 05:58:37
【问题描述】:

我试图通过将异常值替换为 NA 来估算 tibble 中的异常值。以下是我的代码:

for (i in colnames(numTable)){
  m <- mean(pull(numTable[,i]), na.rm=TRUE)
  s<-sd(pull(numTable[,i]),na.rm=TRUE) 
  numTable %>% 
         mutate(numTable[,i] = replace(numTable[,i], abs(numTable[,i]-m)>3*s,na.rm=TRUE), NA)
}

NumTable 看起来像这样:

我不断收到显示

的错误消息
Error: unexpected '=' in:
      " numTable %>% 
        mutate(numTable[,i] ="

请帮助我。谢谢。

【问题讨论】:

  • 为什么需要for 循环。您可以使用mutate_allmutate_atnumTable %&gt;% mutate_all(funs(replace(., abs(.-mean(., na.rm = TRUE))&gt; 3 * sd(., na.rm = TRUE)), NA)
  • 我将其更改为numTable %&gt;% mutate_at(funs(replace(numTable[,i], abs(numTable[,i]-m)&gt; 3 * s(numTable[,i], na.rm = TRUE)), NA)),但出现错误Error: Can't create call to non-callable object @akrun
  • 我说mutate_all而不是mutate_at如果你使用mutate_at,你需要指定列索引或名称
  • 很抱歉,mutate_all 给出了同样的错误。
  • 最好通过更新帖子来显示示例数据的dput

标签: r dplyr


【解决方案1】:

@akrun 建议的版本有效,但有几个错别字。更正这些后,以下代码行运行没有错误:

numTable %>% mutate_all(funs(replace(., abs(. - mean(., na.rm = TRUE)) > 3 * sd(., na.rm = TRUE), NA)))

我使用您数据的前两列对此进行了测试。由于这些列中不满足不等式条件,我重新运行它,将“3 * sd”更改为“1 * sd”并获得以下内容,我认为这反映了您想要的:

# A tibble: 6 x 2
  M     R
  <dbl> <dbl>
1   138    NA
2   240    14
3    NA     6
4    NA    NA
5   239    20
6   253    10

如果您不确定这里发生了什么,我建议您从简化版本开始,例如:

numTable %>% mutate_all(funs(. * 100))

然后逐渐转换成@akrun提供的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-21
    相关资源
    最近更新 更多