r - 循环遍历具有相似结构的列名
问题描述
我有一个非常大的数据集。其中,一小部分具有相同的列名和一个数字索引值(与帖子“如何在 R 中提取具有相同名称但不同标识符的列”中的索引值是一个字符串不同)。例如
Q_1_1, Q_1_2, Q_1_3, ...
我正在寻找一种方法,既可以使用索引循环遍历这些列,也可以一次将它们全部子集化。
我曾尝试使用 paste() 来写他们的列名,但没有运气。请参阅下面的示例代码
定义数据框
df = data.frame("Q_1_1" = rep(1,5),"Q_1_2" = rep(2,5),"Q_1_3" = rep(3,5))
使用粘贴定义列名
cn <- as.symbol(paste("Q_1_",1, sep=""))
cn
df$cn
df$Q_1_1
我想df$cn
返回相同的东西df$Q_1_1
,但df$cn
返回NULL
。
解决方案
如果您只是尝试按列名对数据框进行子集化,则可以使用 dplyr 一次对所有索引列进行子集化,并使用正则表达式将所有列名与特定模式匹配:
library(dplyr)
df = data.frame("Q_1_1" = rep(1,5),"Q_1_2" = rep(2,5),"Q_1_3" = rep(3,5), "A_1" = rep(4,5))
newdf <- df %>%
dplyr::select(matches("Q_[0-9]_[0-9]"))
正[0-9]
则表达式中的 匹配 之间的任何数字_
。根据您尝试匹配的变量,您可能必须更改正则表达式。
您的解决方案的问题是您只保存了列的名称,但实际上并未将其分配回数据框/列。
我希望这有帮助!
推荐阅读
- angular - 获得不可变可观察对象的首选方法是什么?
- gitlab - 为什么每次推送代码时都要安装最新版本的 chrome - gitlab-ci
- php - 从两个表中获取数据,但仅从第一个表 sql
- c# - 异步移动协议违规和/或连接丢失 ONVIF
- javascript - Nodemailer 发送匿名邮件
- powershell - 在 VSTS 中使用 powershell 运行 webpack
- python - 高效使用sklearn的pipeline和gridSearchCV的结合
- excel - VBA检查单元格是否包含列表中的任何内容
- swift - 我可以更改打印机视图控制器中的副本数吗?如果是的话怎么办?
- django - 连接到特定发件人发送的信号未按预期工作