如何像 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()
我有一个列名为 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()