如何在R中有效地选择一系列变量?



我有一系列变量名称为"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 可重现示例(

最新更新