首页 > 解决方案 > 生成向量,将(按名称)列分组到 R 中的新向量中

问题描述

我有一个带有数字(NP)和二进制(所有其余)变量的原始数据集(我的数据集要大得多,包括更多的数字和虚拟变量):

NP <- c(4,6,18,1,3,12,8)
iso_mode_USA <- c(1, 0, 0, 0, 0, 1, 1)
iso_mode_CHN <- c(0, 1, 1, 0, 0, 0, 0)
iso_mode_COL <- c(0, 0, 0, 1, 1, 0, 0)
iso_mode_mod_USA <- c(1, 0, 0, 0, 0, 1, 1)
iso_mode_mod_CHN <- c(0, 1, 1, 0, 0, 0, 0)
iso_mode_mod_COL <- c(0, 0, 0, 1, 1, 0, 0)
exp_sector_4 <- c(0, 1, 0, 0, 1, 0, 0)
exp_sector_5 <- c(1, 0, 1, 0, 0, 0, 0)
exp_sector_7 <- c(0, 0, 0, 1, 0, 1, 1)
original <- data.frame(NP, iso_mode_USA, iso_mode_CHN, iso_mode_COL, iso_mode_mod_USA, iso_mode_mod_CHN, iso_mode_mod_CHN, exp_sector_4, exp_sector_5, exp_sector_7)

我想要一个向量,通过名称的开头记录每列的组(例如,NP 形成一个组,iso_mode_ 形成另一个组,exp_sect_ 形成另一个组,依此类推......)。因此,向量看起来像:

vector <- c("1", "2", "2", "2", "3", "3", "3", "4", "4", "4")

关于如何在 dplyr 中执行此操作的任何想法(对于更多变量)?

谢谢你。

标签: rvectordplyrgroupingtidyr

解决方案


您可以使用grepl查找名称并获取职位whichapply

tt <- paste0("^", unique(sub("_[^_]+$", "_", names(original))), "([^_]+$|$)")
apply(sapply(tt, grepl, names(original)), 1, which)
# [1] 1 2 2 2 3 3 3 4 4 4

推荐阅读