首页 > 解决方案 > 使用后缀向数据框添加新列

问题描述

我想从另一列中减去一列,并使用第一列中的相应后缀创建一个新列。我有大约 50 列我可以“手动”完成如下...

df$new1 <- df$col_a1 - df$col_b1 
df$new2 <- df$col_a2 - df$col_b2

创建一个为我完成这项工作的循环的最简单方法是什么?

标签: rloopsfor-loop

解决方案


我们可以用grep它来识别其中包含"a""b"的列并直接减去它们。

a_cols <- grep("col_a", names(df))
b_cols <- grep("col_b", names(df))
df[paste0("new", seq_along(a_cols))] <- df[a_cols] - df[b_cols]
df

#  col_a1 col_a2 col_b1 col_b2 new1 new2
#1     10     15      1      5    9   10
#2      9     14      2      6    7    8
#3      8     13      3      7    5    6
#4      7     12      4      8    3    4
#5      6     11      5      9    1    2
#6      5     10      6     10   -1    0

数据

对此数据进行了测试

df <- data.frame(col_a1 = 10:5, col_a2 = 15:10, col_b1 = 1:6, col_b2 = 5:10)

推荐阅读