首页 > 解决方案 > 使用来自另一个数据帧的 colnames 子集数据帧

问题描述

问题:

我有一个特殊的问题,我想按列对给定的数据框进行子集化,其中列名存储在另一个数据框中。

使用 mtcars 数据集的示例:

options(stringsAsFactors = FALSE)

col_names <- c("hp,disp", "disp,hp,mpg")
df_col_names <- as.data.frame(col_names)

vec <- df_col_names[1,] # first row contains "hp" and "disp"
mtcars_new <- mtcars[, c("hp", "disp")] ## assuming that vec gives colnames

我什至尝试使用以下命令在每个单词中插入双引号:

尝试的解决方案:

options(stringsAsFactors = FALSE)

col_names <- c("hp,disp", "disp,hp,mpg")
df_col_names <- as.data.frame(col_names)

df_col_names$col_names <- gsub("(\\w+)", '"\\1"', df_col_names$col_names)
vec <- df_col_names[1,]
vec2 <- gsub("(\\w+)", '"\\1"', vec)

mtcars_new <- mtcars[,vec2] ## this should be same as mtcars[, c("hp", "disp")]

预期解决方案

mtcars_new <- mtcars[,vec2] 等于mtcars_new <- mtcars[, c("hp", "disp")]

标签: rdataframe

解决方案


这是另一种方法:

col_names <- c("hp,disp", "disp,hp,mpg")

vec2 <- unlist(str_split(col_names[[1]],','))
mtcars_new <- mtcars[,vec2]

您正在做的是从col_names向量中挑选第一个元素,用分隔符将其拆分,然后将其取消列出(因为 str_split() 会生成一个列表),然后您正在使用新的名称向量来对 mtcars 数据帧进行子集化。


推荐阅读