【问题标题】:How to conditionally change colnames from certain rows?如何有条件地更改某些行的列名?
【发布时间】:2018-11-20 22:07:00
【问题描述】:

我有一个在处理excel调查数据时经常出现的问题:前10个左右的列名在数据集中是合适的,剩下的x:ncol需要重命名为数据集第一行的值,从 x+1 开始。 (在 x 之前,colnames 是正确的,之后 colnames 变为空,我希望作为 colname 的值位于第一行)。

我一直在手动执行此操作,使用dplyr::select() 将它们一一写出来。如何在整洁的工作流程中自动执行此操作?我想象使用set_names()rename_at() 但无法获得语法。提前谢谢你

mtcars %>% 
select(miles_per_gallon = "mpg", everything()) %>% #etc. keep some names
rename_at(vars(3:ncol(.)), funs(mtcars[,1]))


Error: `nm` must be `NULL` or a character vector the same length as `x`

这个错误并不奇怪,但为了说明这一点 - 如何将 x:ncol() 中的名称替换为从 x+1 开始的第一行的值?

【问题讨论】:

  • 我没有得到这个“剩余的x:ncol需要重命名为数据集的第一行,从x+1开始”。你能详细说明一下吗?
  • @Shree 我的编辑回答你的问题了吗?
  • 我想我明白了。查看我的答案,让我知道它是否适合您。
  • 谢谢,是的。 a) 需要在 ncol() 内部和子集外部引用 DF 是我的错误。谢谢!

标签: r dplyr tidyverse purrr


【解决方案1】:

我认为这应该为你做 -

x <- 10 # means 1:10 column names are appropriate

names(df)[(x+1):ncol(df)] <- df[1, (x+1):ncol(df)]

df <- df[-1, ] # removing 1st row assuming it's bad data

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-15
    • 1970-01-01
    • 2021-04-18
    相关资源
    最近更新 更多