我有一系列变量名称为"HPV_x_ALL"。这些名称之间的唯一区别是x,它是数字(例如,11,16,18,33(。我想使用 -rowSums- 来总结每个观察值的 HPV_x_ALL 值,我尝试使用 * 来表示数字,但它不起作用。 谢谢!
更新: 嗨,我添加了一个可重现的数据集。
structure(list(HPV_16_ALL = c(1L, NA, 0L, 0L, 0L, 0L), HPV_18_ALL = c(0L,
NA, 0L, 0L, 0L, 0L), HPV_33_ALL = c(0L, NA, 0L, 0L, 0L, 0L)), row.names = 40:45, class = "data.frame")
如果没有可重现的例子,很难确定这个答案是否合适。
但是,从这个虚拟示例开始:
set.seed(123)
df <- data.frame(Var = c(paste0("HPV_",11:15,"_ALL"),paste0("BPV_",11:15,"_ALL")),
Val = sample(1:100,10))
Var Val
1 HPV_11_ALL 31
2 HPV_12_ALL 79
3 HPV_13_ALL 51
4 HPV_14_ALL 14
5 HPV_15_ALL 67
6 BPV_11_ALL 42
7 BPV_12_ALL 50
8 BPV_13_ALL 43
9 BPV_14_ALL 97
10 BPV_15_ALL 25
您可以通过执行以下操作获取与"HPV_xx_ALL"对应的行:
grep("HPV_\d{2}_ALL",df$Var, perl = TRUE)
[1] 1 2 3 4 5
因此,您可以通过执行以下操作来获取与您要查找的模式相对应的行的总和:
sum(df[grep("HPV_\d{2}_ALL",df$Var, perl = TRUE),"Val"])
[1] 242
如果您的模式HPV_xx_ALL
是列名,则可以通过执行以下操作来执行相同的操作:
rowSums(df[,grep("HPV_\d{2}_ALL", names(df), perl = TRUE)]
它回答了你的问题吗?如果没有,请提供数据集的可重现示例(请参阅:如何制作出色的 R 可重现示例(