data.table:按列名匹配分配给列

时间:2015-11-02 17:17:17

标签: r data.table

说我有一个数据表

> dt = data.table(Faaa = c(1,2,NA), Fbbb = c(2,NA,3), date = as.IDate(c("2010-01-01", "2010-01-02", NA)))
> dt
   Faaa Fbbb       date
1:    1    2 2010-01-01
2:    2   NA 2010-01-02
3:   NA    3       <NA>

假设有很多列的名称以F开头。我希望,对于名称以F开头的每个列,使用列均值来计算NA,而不是日期(和任何其他)列

对于这个问题,F列是彼此相邻的,所以我可以通过索引访问,只是想知道是否有一种聪明的方式,所以我不需要硬编码列索引。

1 个答案:

答案 0 :(得分:2)

您可以使用grep中的na.aggregatezoo

library(data.table)
library(zoo)

dt <- data.table(Faaa = c(1,2,NA), Fbbb = c(2,NA,3), date = as.IDate(c("2010-01-01", "2010-01-02", NA)))

dt[, grep("^F", names(dt), value = TRUE) := lapply(.SD, na.aggregate),.SDcols = grep("^F", names(dt), value = TRUE), with = FALSE]

结果如下:

   Faaa Fbbb       date
1:  1.0  2.0 2010-01-01
2:  2.0  2.5 2010-01-02
3:  1.5  3.0       <NA>