R:按相同列模式的行和

R:按相同列模式的行和,r,matrix,sum,R,Matrix,Sum,我正在尝试合并列并计算行和,这些行和使用相同的已定义字符串模式 例如: mat <- matrix( 1:20, nrow = 2, ncol = 10, byrow = TRUE) colnames(mat) <- c("slurry","slurrys","liquid","liquids","solut","solution","aqueou","aqueous","agent","agents") mat slurry slurrys liquid liquids

我正在尝试合并列并计算行和,这些行和使用相同的已定义字符串模式

例如:

mat <- matrix( 1:20, nrow = 2, ncol = 10, byrow = TRUE)
colnames(mat) <- c("slurry","slurrys","liquid","liquids","solut","solution","aqueou","aqueous","agent","agents")

mat
     slurry slurrys liquid liquids solut solution aqueou aqueous agent agents
[1,]      1       2      3       4     5        6      7       8     9     10
[2,]     11      12     13      14    15       16     17      18    19     20
我试过用sapply做,但计算结果是错误的

nams <- c("slurry", "liquid", "solut","aqueou", "agent")
nams_bind <- sapply(nams, function(i)rowSums(mat[, nams==i, drop=FALSE]))

nams_bind
     slurry liquid solut aqueou agent
[1,]      7      9    11     13    15
[2,]     27     29    31     33    35

nams我们可以使用
grep
根据模式对列进行子集划分,因为
==
将查找精确匹配

sapply(nams, function(x) rowSums(mat[,grep(x, colnames(mat))]))
#     slurry liquid solut aqueou agent
#[1,]      3      7    11     15    19
#[2,]     23     27    31     35    39
sapply(nams, function(x) rowSums(mat[,grep(x, colnames(mat))]))
#     slurry liquid solut aqueou agent
#[1,]      3      7    11     15    19
#[2,]     23     27    31     35    39