我有一个广泛的数据集,其中包含在不同时间点测量的变量。每个变量在数据集中有许多列,列末尾的数字表示收集数据的时间点(例如a.1、a.2、a.3等)。我想为每个时间点创建一个新变量,对相同的变量使用相同的公式。我如何通过对每个时间点只使用一个公式来编写这个代码,而不是像下面的例子那样对每个时间点重复相同的代码?
df$a.1 <- (df$b.1 + df$c.1)/2
df$a.2 <- (df$b.2 + df$c.2)/2
df$a.3 <- (df$b.3 + df$c.3)/2
df$a.4 <- (df$b.4 + df$c.4)/2
感谢我们可以对b
列进行子集化,得到相应的c
列,求均值并赋值给新的列,paste
和+
、/
进行矢量化
df[paste0("a.", 1:4)] <- (df[paste0("b.", 1:4)] + df[paste0("c.", 1:4)])/2
对于across
也可以通过循环'b',列,然后get
相应的'c'列,并更改.names
中的名称来创建新列
library(dplyr)
library(stringr)
df <- df %>%
mutate(across(starts_with('b.'), ~
(. + get(str_replace(cur_column(), 'b', 'c')))/2,
.names = "{str_replace(.col, 'b', 'a')}"))