繁体   English   中英

如何通过提供有关列名的条件来创建 DataFrame 的子集

[英]How to create a subset of a DataFrame by giving a condition regarding the column names

抱歉,如果这是一个非常简单的问题,我是编程新手。 我想通过使用特定的列名来创建 DataFrame(eclipse 数据集)的子集。 但是,由于总共有 212 列,而我需要其中的 41 列,因此将每个列名写成一个列表会太长(我想这不是一种好的编码方式)。 因此,我决定通过指定列名的开头来获取列(这会将列表减少到 15 个元素)。 我有以特定字母开头的列名,例如“NOF”、“NOM”、“NSF”等,我想提取以这些字符串开头的列来创建我的新子集。 我试图运行下面的代码:

eclipse_train <- subset(eclipse, select = starts_with(predictors))

预测变量是我希望列开始的单词列表。 但当然,它给出了错误:

starts_with(predictors) 中的错误:is_string(match) 不是 TRUE

我想不出任何其他方法来过滤以我想创建子集的特定字符串开头的列。 我怎样才能实现这样的事情?

假设注释中的eclipse数据框,使用grep查找以指示的字符串开头的名称的索引,并由这些索引下标。 不使用任何包。

eclipse[ grep("^(NOF|NOM|NSF)", names(eclipse)) ]

给予:

  NOFX NOMX NSFX
1    2    3    4

笔记

如果所需的列是连续的,如注释中的示例,那么这也适用于我们指定名字和姓氏的地方。

subset(eclipse, select = NOFX:NSFX)

给出相同的结果。

笔记

nms <- c("A", paste0(c("NOF", "NOM", "NSF"), "X"), "B")
eclipse <- as.data.frame.list(setNames(seq_along(nms), nms))

看起来像这样:

> eclipse
  A NOFX NOMX NSFX B
1 1    2    3    4 5

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM