gpt4 book ai didi

r - 基于同一数据框中列名部分匹配的子集列

转载 作者:行者123 更新时间:2023-12-05 00:54:23 26 4
gpt4 key购买 nike

我想了解如何通过将列名的前 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")

上面的函数正确检查字符串,但我很困惑如何在数据集中的列名之间进行匹配。

编辑:-我认为正则表达式可以在这里工作。

最佳答案

你可以试试:

v <- unique(substr(names(eatable), 0, 5))
lapply(v, function(x) eatable[grepl(x, names(eatable))])

或使用 map() + select_()
library(tidyverse)
map(v, ~select_(eatable, ~matches(.)))

这使:
#[[1]]
# fruits_area fruits_production
#1 12 100
#2 33 250
#3 660 510
#
#[[2]]
# vegetables_area vegetable_production
#1 26 324
#2 40 580
#3 43 581

如果你想把它变成一个函数:
checkExpression <- function(df, l = 5) {
v <- unique(substr(names(df), 0, l))
lapply(v, function(x) df[grepl(x, names(df))])
}

然后简单地使用:
checkExpression(eatable, 5)

关于r - 基于同一数据框中列名部分匹配的子集列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40203068/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com