【发布时间】:2017-09-19 16:04:16
【问题描述】:
我有一个数据框 df,其中包含一个 ID 变量和每日日期(格式 XYYYYMMDD)作为列标题:
ID <- c(101,102,203,207,209)
X20170101 <- c(1,NA,NA,2,1)
X20170102 <- c(NA,1,1,1,NA)
X20170103<-c(NA,NA,NA,2,1)
X20170201<-c(NA,2,NA,NA,1)
X20170202<-c(NA,1,1,NA,NA)
X20170301<-c(NA,1,NA,NA,NA)
df <- data.table(ID,X20170101,X20170102,X20170103,X20170201,X20170202,X20170301)
ID X20170101 X20170102 X20170103 X20170201 X20170202 X20170301
101 1 NA NA NA NA NA
102 NA 1 NA 2 1 1
203 NA 1 NA NA 1 NA
207 2 1 2 NA NA NA
209 1 NA 1 1 NA NA
对于每个 ID,我想汇总属于同一月份的所有日期/列。如果yyyymm是前三个月的字符串向量
yyyymm <- c("X201701","X201702","X201703")
我想获取数据框 want,其中 yyyymm 中的字符串作为列的标题。那就是:
ID X201701 X201702 X201703
101 1 NA NA
102 1 3 1
203 1 1 NA
207 5 NA NA
209 2 1 NA
我的想法是避免重塑我的数据集的格式,并使用函数 lapply 和 grepl 来部分匹配字符串,但我遗漏了一些东西。
test = lapply(df, function(x) colSums(df[,grepl(x, names(df))]))
非常感谢。
【问题讨论】: