基于数据框中的子字符串对列进行求和

时间:2017-11-20 11:59:13

标签: r

我有一个384列的data.frame。我想根据字母A-H后跟两个数字的子字符串对具有相似字母名称的列进行求和 我试图存储一个模式然后循环,但无法定义唯一的子字符串。

patterns <- unique(substr(names(DT)))  
new <- sapply(patterns, function(xx) rowSums(DT[,grep(xx, names(DT)), drop=FALSE]))  

我的colnames看起来像这样:

   > head(colnames(DT))
[1] "01_001_A01_S1_L001_R1_001" "01_001_A01_S1_L005_R1_001" "01_002_A02_S2_L001_R1_001" "01_002_A02_S2_L005_R1_001"
[5] "01_002_A03_S3_L001_R1_001" "01_002_A03_S3_L005_R1_001"

汇总列A01和A01,A02和A02等...

1 个答案:

答案 0 :(得分:1)

我们可以substr数据集的names并将其用于split数据集并获取rowSums

lapply(split.default(df1, substr(names(df1), 8, 10)), rowSums, na.rm = TRUE)

假设列名具有固定数量的字符

如果它不是固定数量的字符并且'A01'等的位置发生变化,那么我们使用sub

lapply(split.default(df1, sub("^[^A-Z]*([A-Z][0-9]{2}).*", "\\1",  
                           names(df1))), rowSums, na.rm = TRUE)
相关问题