说我有一个数据表
> 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列是彼此相邻的,所以我可以通过索引访问,只是想知道是否有一种聪明的方式,所以我不需要硬编码列索引。
答案 0 :(得分:2)
您可以使用grep
中的na.aggregate
和zoo
:
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>