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

时间:2019-10-03 13:52:28

标签: r dataframe functional-programming data-analysis

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

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

其中 predictors 是我希望各列开头的单词列表。但是,当然,它给出了错误:

  

starts_with(predictors)中的错误:is_string(match)不为真

我想不出其他任何方法来过滤以要创建子集的特定字符串开头的列。我该如何实施?

1 个答案:

答案 0 :(得分:1)

假设注释中的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