如何像 R 中的 SAS 那样按列名对数据框进行子集化?

How to subset data frame by column name like SAS in R?

我有一个列名为 c("WK1","WK2","WK3",...,"WK100") 的数据框 x,我想要每个观察值的第 40 周到第 60 周的总和。

现在在 R 中,我使用 grep 函数找到 WK40 和 WK60 的位置并进行求和:

sum(x[i,(grep(WK40,colnames(x)):grep(WK60,colnames(x))])

这很好,但我知道在 SAS 中你可以只使用 sum(of WK40-WK60)。在 R 中有更好的方法吗?

一般base R没有这样的选择算子。 subset() 函数允许这样的选择

sum(subset(x[i, ], select=WK40:WK60))

或一次获取所有行式总和

rowSums(subset(x, select=WK40:WK60))

但是您只能使用文字值(无变量),因此就编码而言它非常有限。

您也可以使用dplyr来执行类似的操作

x %>% select(b1:b3) %>% rowSums()