首页 > 解决方案 > 如何在包含某个字符串的最后一列之后添加一列?

问题描述

我有一个这样的数据集

df <- data.frame(abc_1 = 1:10, abc_2 = 11:20, abc_3 = 21:30, somevar = 31:40)
head(df)
   abc_1 abc_2 abc_3 somevar
1      1    11    21      31
2      2    12    22      32
3      3    13    23      33
4      4    14    24      34
5      5    15    25      35
6      6    16    26      36

我想在 abc_3 之后插入一个新列(在我的例子中是 abc_1、abc_2、abc_3 的行总和)。由于(a)数据集很大,(b)我可能决定在添加列之前操作数据集(即弄乱列索引),并且因为(c)我想对包含一些不同的变量执行此操作字符串,我希望使用一种不引用列索引而是匹配字符串 abc 的方式来执行此操作。

我在 tibble 包中找到了 add_column 但它只允许按其索引添加列,如下所示

library(tibble)
add_column(df, abc_sum = rowSum(abc_1, abc_2, abc_3), .after = 3)

我想要的是这样的:

   abc_1 abc_2 abc_3 abc_sum somevar
1      1    11    21      33      31
2      2    12    22      36      32
3      3    13    23      39      33
4      4    14    24      42      34
5      5    15    25      45      35
6      6    16    26      48      36

我正在寻找.after = 3通过匹配字符串 abc_3 将其替换为在 abc_3 之后插入它的表达式。

标签: rregexdplyr

解决方案


你可以做:

add_column(df, 
           abc_sum = rowSums(df[startsWith(names(df), "abc")]),
           .after = "abc_3")

   abc_1 abc_2 abc_3 abc_sum somevar
1      1    11    21      33      31
2      2    12    22      36      32
3      3    13    23      39      33
4      4    14    24      42      34
5      5    15    25      45      35
6      6    16    26      48      36
7      7    17    27      51      37
8      8    18    28      54      38
9      9    19    29      57      39
10    10    20    30      60      40

推荐阅读