很抱歉,如果这是一个非常简单的问题,我是编程新手。我想通过使用特定的列名称来创建DataFrame(Eclipse数据集)的子集。但是,由于总共有212列,而我需要其中的41列,所以将每个列名都写成一个列表会太长(而且我猜这不是一种很好的编码方式)。因此,我决定通过指定列名的开头(将列表减少到15个元素)来获取列。我有以特定字母开头的列名,例如“ NOF”,“ NOM”,“ NSF”等,我想提取以这些字符串开头的列以创建新的子集。我尝试运行以下代码:
eclipse_train <- subset(eclipse, select = starts_with(predictors))
其中 predictors 是我希望各列开头的单词列表。但是,当然,它给出了错误:
starts_with(predictors)中的错误:is_string(match)不为真
我想不出其他任何方法来过滤以要创建子集的特定字符串开头的列。我该如何实施?
答案 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