首页 > 解决方案 > 为 R 中的每个时间点创建一个新变量

问题描述

我有一个广泛的数据集,其中包含在不同时间点测量的变量。每个变量在数据集中都有许多列,列末尾的数字表示收集数据的时间点(例如 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

谢谢

标签: rapplylongitudinal

解决方案


我们可以对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')}"))

推荐阅读