如何在dplyr链中使用数据的第一行更改列名

8
我尝试使用数据的第一行重命名列名。 在r中使用第一行数据作为列名 使用%>%与替换函数(如colnames()<--) 我遇到的问题是,在不破坏dplyr pipeline的情况下完成此过程,因为我想在重命名列之后继续执行其他操作。
在此帖子中有关于rename函数的评论。如果您只需要重命名少量列,则dplyr :: rename可能更方便(它需要编写旧名称和新名称;请参见@Richard Scriven的答案)
但是,在我的真实数据中,列数不固定,因此我需要使用类似于选择列select(X9:max(ncol(.)))的内容。
df <- data.frame(replicate(10,sample(100,2,rep=TRUE)))


  X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
1 77 40 45 98 75 17  5 33 53  94
2 43 67 82 42 63 90 14 65  4  98

library(dplyr)
df1 <- df %>%
  select(X8,X9,X10)%>%
  ....

选择并重命名列后的预期输出
  33 53  94
1 65  4  98

9
将数据框 df 的列名设置为第一行的值,并使用字符类型作为列名类型。可以使用以下代码实现:df %>% setNames(as.character(df[1,])) - IceCreamToucan
@Ryan 很好。是否可以在 setNames 后删除第一行?因为当前输出仍然保留了第一行。 - Alexander
@CalumYou 这是正确的! - Alexander
你可以使用 df %>% .[-1,] 命令删除第一行。如果你想要重命名特定的列,你可能需要使用 rename 函数。 - IceCreamToucan
重命名,如 df %>% 重命名(newname1 = oldname1,newname2 = oldname2,.....) - IceCreamToucan
显示剩余5条评论
4个回答

2
你可以通过将列命名为第一行,然后删除第一行来轻松完成此操作。
library(dplyr)
df <- df %>%
  select(X8,X9,X10)

names(df) <- df[1,]
df <- df[-1,]


1
你可以这样做。
library(tidyverse)
df <- data.frame(replicate(10,sample(100,2,rep=TRUE)))
df
#>   X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
#> 1 22 64 23 11 36 46 87 57 90  96
#> 2 62 46 15  9 77 84 70 32 71   8

cols_2_select <- c('X8','X9','X10')

df %>%
  select(all_of(cols_2_select)) %>% 
  set_names(df %>% select(all_of(cols_2_select)) %>% slice(1) %>% as.character()) %>% 
  slice(-1)
#>   57 90 96
#> 1 32 71  8

2021年04月16日创建,使用reprex包 (v1.0.0)


0

由于我在这里没有看到这个选项,而且它似乎比其他选项更简单/更整洁,因此可以使用以下代码:set_names(slice(.,1))(按第一行命名;不需要显式强制转换为字符)然后是slice(-1)(删除第一行,因为您不再需要它)...

library(tidyverse)
df1 <- (df 
    %>% select(X8:X10) 
    %>% set_names(slice(.,1)) 
    %>% slice(-1)
)

(set_names 取自 @cropgen 的回答)


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

> df
  X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
1 79  6 82 23 36 58 95 30 60  42
2 89 77  9 13 79 97  1 10 48  66

在基本的 R 中,我们可以这样做:
df1 <- "colnames<-"(df[2 , x <- paste0("X", 8:10)], df[1, x])

> df1
  30 60 42
2 10 48 66

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接