使用列范围或选择模式计算(按行)列

Aji*_*ngh 3 r dplyr

gl <- tibble::tribble(
                   ~X4010, ~X4020, ~X4030,  ~X5010, ~X5020, ~X5030, ~X5040,
                     1000,    100,     10,     500,    100,     50,      5,
                     1100,    110,     11,     550,    110,     55,    5.5,
                     1210,    121,   12.1,     605,    121,   60.5,   6.05,
                     1331,  133.1,  13.31,   665.5,  133.1,  66.55,   6.65,
                   1464.1, 146.41,  14.64,  732.05, 146.41,   73.2,   7.32,
                  1610.51, 161.05,   16.1,  805.25, 161.05,  80.52,   8.05,
                  1771.56, 177.15,  17.71,  885.78, 177.15,  88.57,   8.85,
                  1948.71, 194.87,  19.48,  974.35, 194.87,  97.43,   9.74,
                  2143.58, 214.35,  21.43, 1071.79, 214.35, 107.17,  10.71,
                  2357.94, 235.79,  23.57, 1178.97, 235.79, 117.89,  11.78
                  )
Run Code Online (Sandbox Code Playgroud)

需要创建两个计算列,按行添加列,如下所示:

gl %>% 
  mutate(C1 = X4010+X4020+X4030, C2 =  X5010+X5020+X5030+X5040 )
Run Code Online (Sandbox Code Playgroud)

但是,由于 X 变量的数量非常大,因此我不想添加单个列,而是想指定范围,例如 X4010:X4030select(starts_with("X40"))

如何将公式用于C1C2被修改以使用范围或模式?谢谢。

所需的输出如下:

result <- tibble::tribble(
                   ~X4010, ~X4020, ~X4030,  ~X5010, ~X5020, ~X5030, ~X5040,     ~C1,     ~C2,
                     1000,    100,     10,     500,    100,     50,      5,    1110,     655,
                     1100,    110,     11,     550,    110,     55,    5.5,    1221,   720.5,
                     1210,    121,   12.1,     605,    121,   60.5,   6.05,  1343.1,  792.55,
                     1331,  133.1,  13.31,   665.5,  133.1,  66.55,   6.65, 1477.41,   871.8,
                   1464.1, 146.41,  14.64,  732.05, 146.41,   73.2,   7.32, 1625.15,  958.98,
                  1610.51, 161.05,   16.1,  805.25, 161.05,  80.52,   8.05, 1787.66, 1054.87,
                  1771.56, 177.15,  17.71,  885.78, 177.15,  88.57,   8.85, 1966.42, 1160.35,
                  1948.71, 194.87,  19.48,  974.35, 194.87,  97.43,   9.74, 2163.06, 1276.39,
                  2143.58, 214.35,  21.43, 1071.79, 214.35, 107.17,  10.71, 2379.36, 1404.02,
                  2357.94, 235.79,  23.57, 1178.97, 235.79, 117.89,  11.78,  2617.3, 1544.43
                  )
Run Code Online (Sandbox Code Playgroud)

Ano*_*n R 6

我希望这是你正在寻找的:

library(dplyr)

gl %>%
  rowwise() %>%
  mutate(C1 = sum(c_across(starts_with("X40"))),
         C2 = sum(c_across(starts_with("X50"))))

# A tibble: 10 x 9
# Rowwise: 
   X4010 X4020 X4030 X5010 X5020 X5030 X5040    C1    C2
   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
 1 1000   100   10    500   100   50    5    1110   655 
 2 1100   110   11    550   110   55    5.5  1221   720.
 3 1210   121   12.1  605   121   60.5  6.05 1343.  793.
 4 1331   133.  13.3  666.  133.  66.6  6.65 1477.  872.
 5 1464.  146.  14.6  732.  146.  73.2  7.32 1625.  959.
 6 1611.  161.  16.1  805.  161.  80.5  8.05 1788. 1055.
 7 1772.  177.  17.7  886.  177.  88.6  8.85 1966. 1160.
 8 1949.  195.  19.5  974.  195.  97.4  9.74 2163. 1276.
 9 2144.  214.  21.4 1072.  214. 107.  10.7  2379. 1404.
10 2358.  236.  23.6 1179.  236. 118.  11.8  2617. 1544.
Run Code Online (Sandbox Code Playgroud)