更改所选列的列名称

时间:2018-05-30 20:45:50

标签: r dplyr rename

我想用第一行数据更改列名。

我之前的帖子中的

This solution适用于该部分。

OTH,在setNames函数内部我想再添加一个级别来更改所选列的列名。

这是问题

df <- data.frame(replicate(10,sample(100,2,rep=TRUE)))

  X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
1 76 44 89 13  8 31 12 21 50  36
2 78 27 81 75 61 84  2 65 43  51

library(dplyr)
df1 <- df %>%
  select(X1:X5)%>%
  setNames(as.character(.[1,]))

给出了

> print(df1)
  76 44 89 13  8
1 76 44 89 13  8
2 78 27 81 75 61

确定够了!但是我希望保留名称可以说X1,X2X3,并且只能从X4更改为最大列数

所以我试试

df1 <- df %>%
  select(X1:X5)%>%
  setNames(as.character(.[1,X4:max(ncol(.))]))
  

[.data.frame(。,1,X4:max(ncol(。)))中的错误:对象&#39; X4&#39;找不到

好吧我可能需要按编号

指定列位置
df1 <- df %>%
  select(X1:X5)%>%
  setNames(as.character(.[1,4:max(ncol(.))]))

> print(df1)
  13  8 NA NA NA
1 76 44 89 13  8
2 78 27 81 75 61

正如我们在这里看到的那样,名字发生了变化。即使我使用4:max(ncol(.))

指定了列位置,也会从第一列开始命名

为什么会这样? 任何帮助将不胜感激!

预期产量。 (我也想删除这个setName操作后的第一行)

  X1 X2 X3 13  8
1 78 27 81 75 61

1 个答案:

答案 0 :(得分:1)

这样可以解决问题:

require(tidyverse)

#Using your dataset
df <- data.frame(replicate(10,sample(100,2,rep=TRUE)))

df %>% 
  set_names(c(names(df)[1:3], as.character(.[1,])[4:10])) %>% 
  rownames_to_column("index") %>% 
  filter(index != 1 ) %>% 
  select(-index)

  X1 X2 X3 16 56 51 11 21 61 37
1 43 15 75 38 70 20 63 70 53 79