r语言 - 如何重命名函数中数据帧列的中间并向其添加"_cntr"



我是R编程的新手,我必须制作一个函数来收集数据帧,并返回相同的数据帧,其列数是原始列的两倍,在这些新列中,值必须是原始值减去平均值(平均值是数据帧的第51行(。事实上,我已经制作了这个函数,它可以工作,我唯一需要做的就是重命名数据帧的9:16列,它们必须与原始列具有相同的名称,并添加"_cntr";他们。

我曾想过添加带有粘贴功能的_cntr,但它对我不起作用,或者我没有很好地使用它,我曾想过这样的事情:

nom = paste("cntr",sep = '_')
colnames(state.df3) = nom

这将它放在我接下来将共享的函数中,但这将第一列的名称更改为centr,并将其余列的值保留为NA。

如果我这样做:

nom = paste("cntr",9:16,sep = '_')
colnames(state.df3) = nom

它返回cntr1、cntr2、cntr3。。。我不希望它回来,我希望它回来";Population_cntr"Income_cntr"文盲(_cntr(。。。从第9列到第16列的所有内容(因为这是重复开始的地方(

我用作测试的数据帧可以在这里访问:

state.df = as.data.frame(state.x77)

这就是我到目前为止所做的函数,我只需要修改9:16列的名称。

mi_funcion <- function(df) { 
row_medias <- tail(df, 1)
row_resto <- head(df, -1)
tmp <- rbind(row_resto - as.list(row_medias), row_medias)
resultado = cbind(df, tmp)
return(resultado)
}

如果有人能帮我一把,告诉我哪里失败了,我将非常感激。

这只是一个示例,因此对于您的示例,请将1:2替换为9:16

df <- data.frame(Population = c(10),Income = c(20000),Illiteracy = ("Y"))
df
Population Income Illiteracy
1         10  20000          Y
colnames(df)[1:2] <- paste(colnames(df)[1:2],"cntr", sep = "_")

输出:

df
Population_cntr Income_cntr Illiteracy
1              10       20000          Y

我们也可以使用dplyr的rename_with:

library(dplyr)
state.df3 %>% rename_with(~paste(.x, "cntr",sep = '_'), .cols = everything())

最新更新