【问题标题】:Summing many columns with data.table in R, remove NA [duplicate]在 R 中将许多列与 data.table 相加,删除 NA [重复]
【发布时间】:2013-09-28 10:55:58
【问题描述】:

我猜这确实是两个问题。我正在尝试使用 data.table 包来总结一个大型数据集。假设我的原始大型数据集是 df1,不幸的是 df1 有 50 列(y0...y49),我想要 3 个字段(segmentfield1、segmentfield2、segmentfield3)的总和。有没有比输入每个 y0...y49 列更简单的方法?与此相关的是,data.table 是否有一个通用的 na.rm=T 而不是每个总和都输入它?

dt1 <- data.table(df1)
setkey(dt1, segmentfield1, segmentfield2, segmentfield3)
dt2 <- dt1[,list( y0=sum(y0,na.rm=T), y1=sum(y1,na.rm=T), y2=sum(y2,na.rm=T), ... 
            y49=sum(y49,na.rm=T) ),
            by=list(segmentfield1, segmentfield2, segmentfield3)]

【问题讨论】:

  • @rcs,不是完全重复,而是类似

标签: r data.table


【解决方案1】:

首先,为正在使用的名称创建对象变量:

colsToSum <- names(dt1)  # or whatever you need
summedNms <- paste0( "y", seq_along(colsToSum) )

如果您想将其复制到新的 data.table 中

dt2 <- dt1[, lapply(.SD, sum, na.rm=TRUE), .SDcols=colsToSum]
setnames(dt2, summedNms)

如果您想将列附加到原始列

dt1[, c(summedNms) := lapply(.SD, sum, na.rm=TRUE), .SDcols=colsToSum]

就一般的na.rm流程而言,没有一个特定于data.table的流程,但请查看?na.omit?na.exclude

【讨论】:

  • 您可以将function(x) fun(na.omit(.SD)) 用于没有 na.rm 选项的函数。
猜你喜欢
  • 1970-01-01
  • 2015-05-06
  • 1970-01-01
  • 2018-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多