首页 > 解决方案 > 循环遍历具有相似结构的列名

问题描述

我有一个非常大的数据集。其中,一小部分具有相同的列名和一个数字索引值(与帖子“如何在 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

标签: rdataframe

解决方案


如果您只是尝试按列名对数据框进行子集化,则可以使用 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]则表达式中的 匹配 之间的任何数字_。根据您尝试匹配的变量,您可能必须更改正则表达式。

您的解决方案的问题是您只保存了列的名称,但实际上并未将其分配回数据框/列。

我希望这有帮助!


推荐阅读