r - 使用来自另一个数据帧的 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")]
解决方案
这是另一种方法:
col_names <- c("hp,disp", "disp,hp,mpg")
vec2 <- unlist(str_split(col_names[[1]],','))
mtcars_new <- mtcars[,vec2]
您正在做的是从col_names
向量中挑选第一个元素,用分隔符将其拆分,然后将其取消列出(因为 str_split() 会生成一个列表),然后您正在使用新的名称向量来对 mtcars 数据帧进行子集化。
推荐阅读
- bash - 在 bash 中搜索文本文件中的模式时的逻辑和 (&&)
- c++ - 使用 GetAdaptersAddresses 获取 Mac 地址
- laravel - Laravel 8 和 Vue Axios 登录不起作用
- networking - 使用 socat 端口转发到本地域
- firebase - Firebase:获取recaptcha验证者的秘密和公钥
- react-native - 反应导航,无法更改顶部栏
- r - 在ggplot2中的绘图旁边和图例下方绘制表格
- html - 是否可以使用 Go 和 webview 使用本地 HTML 文件?
- elasticsearch - 如何测试 Elasticsearch 集群的 3 节点设置的 HA?
- reactjs - 在 Reactjs 中实现文件上传的问题