我有一个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等...
答案 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)