生成向量(按名称)在 R 中的新向量中对列进行分组
Generate vector that groups (by name) columns in a new vector in R
我有一个像 original 这样的数据集,带有数字 (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 中执行此操作(对于更多变量)吗?
谢谢。
您可以使用 grepl
查找 名称 并在 apply
中使用 which
获取位置。
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
我有一个像 original 这样的数据集,带有数字 (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 中执行此操作(对于更多变量)吗?
谢谢。
您可以使用 grepl
查找 名称 并在 apply
中使用 which
获取位置。
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