我尝试使用数据的第一行重命名列名。
use first row data as column names in r
use %>% with replacement functions like 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
答案 0 :(得分: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
由 reprex package (v1.0.0) 于 2021 年 4 月 16 日创建
答案 1 :(得分: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
答案 2 :(得分:0)
您可以通过将列命名为第一行然后删除第一行来轻松完成此操作。
library(dplyr)
df <- df %>%
select(X8,X9,X10)
names(df) <- df[1,]
df <- df[-1,]
答案 3 :(得分:0)
因为我在这里没有看到它,而且它似乎比其他选项更简单/更整洁:set_names(slice(.,1))
(以第一行命名;不需要对字符进行显式强制),然后是slice(-1)
(丢弃第一行,因为您不再需要它)...
library(tidyverse)
df1 <- (df
%>% select(X8:X10)
%>% set_names(slice(.,1))
%>% slice(-1)
)
(set_names
取自 @cropgen 的回答)