gpt4 book ai didi

r - 如何在 R 中创建一个函数来创建列的子集?

转载 作者:行者123 更新时间:2023-12-01 11:47:32 27 4
gpt4 key购买 nike

我在 R 中有一个数据框,列中有将近 40 年(从 1980 年到 2019 年),我需要一个函数来创建几个采用相同变量并重命名的子集,然后我必须在下面放入其他数据框。

X1980 <- subset(all_data,select=c("Pais","RubroId","X1980"))
names(X1980)[names(X1980) == 'X1980'] <- 'Valor'
X1980$ANIO <- 1980

X1981 <- subset(all_data,select=c("Pais","RubroId","X1981"))
names(X1981)[names(X1981) == 'X1981'] <- 'Valor'
X1981$ANIO <- 1981

X1982 <- subset(all_data,select=c("Pais","RubroId","X1982"))
names(X1982)[names(X1982) == 'X1982'] <- 'Valor'
X1982$ANIO <- 1982

final_data <- rbind(X1980,X1981,X1982)

最佳答案

我们可以创建一个包含列的函数以选择 (cols_select) 作为字符向量,names_to_change('Valor' 或任何其他列名称),子集数据集 ( 'dat') 通过选择列,设置列名并创建一个新列 'ANIO'

f1 <- function(dat, cols_select, names_to_change){
yearcol <- grep("^X\\d{4}$", cols_select, value = TRUE)
tmpdat <- subset(dat,select=cols_select)
names(tmpdat)[names(tmpdat) == yearcol] <- names_to_change
tmpdat$ANIO <- as.integer(sub("^X", "", yearcol))
tmpdat
}

并在 lapply 中使用它

nm1 <- paste0("X", 1980:1982)
out <- do.call(rbind, lapply(nm1, function(x)
f1(dat, cols_select = c("Pais","RubroId", x), "Valor")))

关于r - 如何在 R 中创建一个函数来创建列的子集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60910174/

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