首页 > 解决方案 > 根据R中的列名将一组列除以另一组列

问题描述

我想根据列名中的共同内容将一组列除以另一组列。更具体地说,在下文中,dataframe我想将带有prefix1的每一列与带有prefix2的相应列分开(即“prefix1 column1”与“prefix2 column1”,“prefix1 column2”与“prefix2 column2”等)。

在此处输入图像描述

dt <- data.frame(replicate(6,sample(1:15,10,rep=TRUE)))
colnames(dt) <- c("prefix1 column1","prefix1 column2","prefix1 column3","prefix2 column1","prefix2 column2","prefix2 column3")
View(dt)

理想的输出将是一个带有额外 3 列的数据框,其中包含除法结果。我的头脑一直在坚持这项任务 - 我会很感激任何建议。

标签: rdplyr

解决方案


我们可以循环across'prefix1' 列,将列名 ( cur_column()) 中的子字符串 'prefix1' 替换为 'prefix2'、get值和除法,通过更新.names

library(dplyr)
library(stringr)
dt <- dt %>% 
   mutate(across(starts_with('prefix1'), ~ ./get(str_replace(cur_column(), 
      'prefix1', 'prefix2')), .names = '{.col}_new'))

或使用base R

dt[paste0(names(dt)[1:3], "_new")] <- dt[1:3]/dt[4:6]

推荐阅读