循环遍历具有相似结构的列名

时间:2019-05-28 11:09:30

标签: r dataframe

我有一个非常大的数据集。其中的一个小子集具有相同的列名,且索引值是数字(不同于文章“如何在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

1 个答案:

答案 0 :(得分:0)

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

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

我希望这会有所帮助!