【问题标题】:R - setting NA to zero in an aggregate functionR - 在聚合函数中将 NA 设置为零
【发布时间】:2016-06-27 00:21:31
【问题描述】:

在 R 中,我试图运行以下代码来查找数据框中几行的方差。多于1个case时方差计算正确,但ID1&ID2只有1个case时明显产生NA

collated <- aggregate(.~ID1+ID2, interactionData, FUN=var, na.rm=TRUE) 

在上面的代码中,有没有办法强制R设置为0而不是NA

(我知道之后我可以按照collated[is.na(collated)] &lt;- 0 的行运行一行代码。但是,我只是想知道是否可以在aggregate 函数中执行所有这些操作。

【问题讨论】:

  • 你可以试试aggregate(.~ID1+ID2, interactionData, FUN=function(x) if(length(x)==1) 0 else var(x, na.rm=TRUE))
  • 任何示例输入以便我们确认想法? (我认为聚合的na.action 参数可能是一种解决方法)
  • 老实说,我认为在单独的一行中用 0 替换 NAs 是我会做的。易于理解和阅读。
  • @joran 谢谢!我已经尝试用 0 回复 NA,它工作得非常好(是的,它非常易读)。我只是想通过看看其他人是否可以指出其他选择来扩展我的知识。
  • @Tensibai - 我花了一些时间试图确定是否可以使用 na.action=etc 但找不到任何可以设置为零的东西。

标签: r missing-data var aggregation


【解决方案1】:

我们可以根据length创建if/else条件,将length输出为1到0或else得到变量的var

aggregate(.~ID1+ID2, interactionData, FUN=function(x)
         if(length(x)==1) 0 else var(x, na.rm=TRUE))

数据

set.seed(24)
interactionData <- data.frame(ID1= rep(1:4, each=3), 
  ID2= sample(LETTERS[1:5], 12, replace=TRUE), value= rnorm(12))

【讨论】:

  • 如上所述,这非常有效。我没有考虑 if(x...) 选项,因为我一直在思考 na.action= 路线。非常感谢@akrun
猜你喜欢
  • 2018-08-07
  • 1970-01-01
  • 2015-07-04
  • 2022-07-24
  • 2015-11-19
  • 2018-02-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多