【发布时间】:2016-10-23 12:46:41
【问题描述】:
我想了解如何通过将列名的前 5 个字母相互匹配来对同一数据框中的多个列进行子集化,如果它们相等,则对其进行子集化并将其存储在新变量中。
这是我所需输出的一个小解释。如下所述,
假设数据框是eatable
fruits_area fruits_production vegetable_area vegetable_production
12 100 26 324
33 250 40 580
66 510 43 581
eatable <- data.frame(c(12,33,660),c(100,250,510),c(26,40,43),c(324,580,581))
names(eatable) <- c("fruits_area", "fruits_production", "vegetables_area",
"vegetable_production")
我正在尝试编写一个函数,该函数将匹配循环中的字符串,并在匹配列名中的前 5 个字母后存储子集列。
checkExpression <- function(dataset,str){
dataset[grepl((str),names(dataset),ignore.case = TRUE)]
}
checkExpression(eatable,"your_string")
上述函数正确检查字符串,但我很困惑如何在数据集中的列名之间进行匹配。
编辑:- 我认为正则表达式可以在这里工作。
【问题讨论】:
-
试试
substr -
使用
dplyr,相信你只想要select(eatable, starts_with("fruit"))。 -
@aichao 我试过了。你的建议很好,但我想要的是自动检查数据框中的列名,如果它们匹配,子集。
-
然后你可以像以前一样使用
grepl,并将结果用于subset你的列subset(dataset,select=colnames(dataset)[cols]),其中cols是grepl的输出
标签: r regex if-statement string-parsing