如何重命名“_cntr”并将其添加到函数内数据框列的中间
How to rename and add "_cntr" to the middle of the columns of a dataframe within a function
我是 R 编程的新手,我不得不创建一个函数来收集数据帧和 returns 相同的数据帧,其列数是原始列的两倍,在这些新列中,值必须是原始值减去平均值(平均值是数据帧的第 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
它 returns cntr1, cntr2, cntr3 ... 我不希望它 return 我希望它 return “Population_cntr ", "Income_cntr", "Illiteracy_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())
我是 R 编程的新手,我不得不创建一个函数来收集数据帧和 returns 相同的数据帧,其列数是原始列的两倍,在这些新列中,值必须是原始值减去平均值(平均值是数据帧的第 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
它 returns cntr1, cntr2, cntr3 ... 我不希望它 return 我希望它 return “Population_cntr ", "Income_cntr", "Illiteracy_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())