【问题标题】:How to rename and add "_cntr" to the middle of the columns of a dataframe within a function如何重命名并将“_cntr”添加到函数内数据框列的中间
【发布时间】:2021-12-28 07:00:53
【问题描述】:

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

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

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

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

如果我这样做:

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

它返回 cntr1、cntr2、cntr3 ......我不希望它返回那个,我希望它返回“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)
}

如果有人能帮助我并告诉我哪里失败了,我将不胜感激。

【问题讨论】:

  • colnames(df)[9:16]
  • 太好了,非常感谢,但是左边增加了cntr,仍然是cntr_Population,如果我想要它是Population_cntr,我该怎么做?

标签: r dataframe function rename


【解决方案1】:

我们也可以使用dplyr的rename_with

library(dplyr)

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

【讨论】:

    【解决方案2】:

    这只是一个示例,因此请将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
    

    【讨论】:

    • 不知道改变参数的顺序改变了粘贴的顺序,非常感谢,感谢你,我学会了
    猜你喜欢
    • 2023-03-21
    • 1970-01-01
    • 2020-09-02
    • 2020-04-17
    • 2014-08-02
    • 1970-01-01
    • 2019-10-31
    • 1970-01-01
    • 2023-04-10
    相关资源
    最近更新 更多