วิธีเปลี่ยนชื่อคอลัมน์ทั้งหมดในดาต้าเฟรมหลังแถวที่ระบุโดยใช้ dplyr ไปป์ [ซ้ำ]

Aug 19 2020

ฉันมี dataframe df:

df <- structure(list(V1 = c("H1", " 0.9", 
"4.1", "4.0"), V2 = c("H2", " 2.174", 
"4.1", "4.1"), V3 = c("H3", " 2.592", 
"3.8", "4.1"), V4 = c("H4", " 2.236", 
"3.8", "4.087463")), row.names = c(NA, -4L), class = "data.frame")

> df
    V1     V2     V3     V4
1   H1     H2     H3     H4
2  0.9  2.174  2.592  2.236
3  4.1    4.1    3.8    3.8
4  4.0    4.1    4.1    4.0

ฉันต้องการเปลี่ยนชื่อคอลัมน์หลังแถวแรก แต่ใช้ท่อ dplyr

ผลลัพธ์ที่ต้องการจะมีลักษณะดังนี้:

    H1     H2     H3     H4
2  0.9  2.174  2.592  2.236
3  4.1    4.1    3.8    3.8
4  4.0    4.1    4.1    4.0

ฉันได้ลองแล้ว แต่ไม่ได้ผล:

df_new <- df %>%
    rename_all(.,df[1,])

มีใครแนะนำวิธีการที่เป็นระเบียบเรียบร้อยโดยใช้ dplyr ได้ไหม

คำตอบ

3 akrun Aug 19 2020 at 20:11

เราสามารถใช้row_to_namesจากjanitor

library(janitor)
library(dplyr)
df %>%
    row_to_names(row_number = 1) %>%
    type.convert(as.is = TRUE) %>%
    as_tibble
# A tibble: 3 x 4
#     H1    H2    H3    H4
#  <dbl> <dbl> <dbl> <dbl>
#1   0.9  2.17  2.59  2.24
#2   4.1  4.1   3.8   3.8 
#3   4    4.1   4.1   4.09
2 Waldi Aug 19 2020 at 20:14

ท่อไม่เต็ม แต่ไม่มีแพ็คเกจเสริม:

library(dplyr)

colnames(df)<-df[1,]
df %>% tail(-1)
    H1     H2     H3       H4
2  0.9  2.174  2.592    2.236
3  4.1    4.1    3.8      3.8
4  4.0    4.1    4.1 4.087463

หรือเต็มตามคำแนะนำโดย @IceCreamToucan & @Henrik:

df %>% setNames(.[1,]) %>% tail(-1) %>% mutate(across(everything(),as.numeric))
   H1    H2    H3       H4
1 0.9 2.174 2.592 2.236000
2 4.1 4.100 3.800 3.800000
3 4.0 4.100 4.100 4.087463