如何通过a:b形式的变量名对变量子集执行rowSum计算?
当然可以!而且这才是更稳健的做法——依赖变量名称而非位置索引,能彻底避免数据集结构更新(比如列顺序调整)带来的计算错误。
在dplyr里,你可以用pick()函数直接通过变量名范围来选择目标列,把它传给rowSums()就行,修改后的代码如下:
library(dplyr) dd <- data.frame(a=1:10,b=2:11,c=3:12) dd %>% mutate(Total = rowSums(pick(a:b)))
运行后得到的结果和你原来的输出完全一致:
a b c Total 1 1 2 3 3 2 2 3 4 5 3 3 4 5 7 4 4 5 6 9 5 5 6 7 11 6 6 7 8 13 7 7 8 9 15 8 8 9 10 17 9 9 10 11 19 10 10 11 12 21
另外还有一种等价写法,用across()函数:
dd %>% mutate(Total = rowSums(across(a:b)))
这两种方法的核心都是基于变量名选择列,哪怕之后你把数据集里的列顺序打乱(比如把c列移到a前面),只要变量名不变,代码就能正确计算出a和b的行和,完全不用依赖列的位置索引。
内容的提问来源于stack exchange,提问作者Z. Zhang
相关产品推荐
相关产品推荐

