R- 在模式匹配列上进行变异并创建新的 var

Eri*_*rin 0 r dplyr

我的数据集是这样的

  id start_year subj1_year subj2_year
1  1 2010       2001       2003
2  2 2012       2002       2004
3  3 2015       2003       2005
4  4 2021       2004       2006
Run Code Online (Sandbox Code Playgroud)

我想创建的每个新列"Subj",每个之间的差异subject_yearstart_year列(持续时间):

 id start_year subj1_year subj2_year subj1_duration subj2_duration
1  1 2010       2001       2003              9              7
2  2 2012       2002       2004             10              8
3  3 2015       2003       2005             12             10
4  4 2021       2004       2006             17             15
Run Code Online (Sandbox Code Playgroud)

使用什么可以解决dplyr?谢谢!!

Ron*_*hah 5

您可以使用across以避免重复代码 -

library(dplyr)

df %>%
  mutate(across(starts_with('subj'), 
          ~start_year - ., .names = '{sub("year", "duration", .col)}'))

#  id start_year subj1_year subj2_year subj1_duration subj2_duration
#1  1       2010       2001       2003              9              7
#2  2       2012       2002       2004             10              8
#3  3       2015       2003       2005             12             10
#4  4       2021       2004       2006             17             15
Run Code Online (Sandbox Code Playgroud)

.names 参数用于将名称分配给新列,将“年份”更改为“持续时间”。