1

我对 R 比较陌生(以前曾在 Stata 工作过),如果问题太琐碎,我很抱歉。

我有一个数据框,其中的变量按顺序命名,遵循以下逻辑: q12.XY 其中 X 假定值从 1 到 9,Y 假定值从 1 到 5

我需要将所有 q12.XY 变量的变量值与从 1 到 3 的 Y 数字相加(但不是以数字 4 或 5 结尾的那些)

理想情况下,我会根据变量的序号编写一个循环,即:

df$test <- 0
for(i in 1:9){
     for(j in 1:3){
       df$test <- df$test+ df$q12.i.j
      }
 }

那显然行不通。

我还尝试使用命令“rowSums”和“子集”

df$test <- rowSums(subset(df,select= ...)

但是我觉得它有点麻烦,因为列号不是连续的,我不想输入所有变量的名称。

任何建议如何做到这一点?

4

1 回答 1

1

我们可以使用grep来获得比赛

rowSums(df[grep("q12\\.[1-9]\\.[1-3]", names(df))])

或者如果所有列名都存在,则通过创建列名来使用完全匹配paste

rowSums(df[paste0(rep(paste0("q12.", 1:9, "."), 3), 1:3)])
于 2019-02-11T16:33:59.297 回答