簡體   English   中英

使用 1 列中的值作為新數據框中的列名重塑 R 中的數據框

[英]Reshape dataframe in R using values in 1 column as column names in new dataframe

我認為這是一個非常直接的重塑,盡管我們正在努力。 我們有這個數據框:

structure(list(X1 = c("Title:", "Phone:", "Email:", "Previous College:"
), X2 = c("Head Coach, Year2", "123-456-7890", "name@email.com", 
          "The Best")), class = "data.frame", row.names = c(NA, 
                                                                     -4L))

                 X1                X2
1            Title: Head Coach, Year2
2            Phone:      123-456-7890
3            Email:    name@email.com
4 Previous College:          The Best

我們正在嘗試將其轉換為像這樣的 1 行數據幀:

data.frame(Title = 'Head Coach, Year2', Phone = '123-456-7890', Email = 'name@email.com', `Previous College` = 'The Best', stringsAsFactors = FALSE)

              Title        Phone          Email Previous.College
1 Head Coach, Year2 123-456-7890 name@email.com         The Best

我們可以去deframe並轉換為deframe

library(dplyr)
library(stringr)
library(tibble)
df1 %>%
    mutate(X1 = str_remove(X1, ":")) %>%
    deframe %>%
    as_tibble_row
# A tibble: 1 x 4
  Title             Phone        Email          `Previous College`
  <chr>             <chr>        <chr>          <chr>             
1 Head Coach, Year2 123-456-7890 name@email.com The Best          

或與base R通過設置與“X1”列和使用的名稱as.data.frame.list到命名轉換vector到data.frame

as.data.frame.list(with(df1, setNames(X2, trimws(X1, 
        whitespace = ":"))), check.names = FALSE)
              Title        Phone          Email Previous College
1 Head Coach, Year2 123-456-7890 name@email.com         The Best

或者使用data.table::transpose

 data.table::transpose(df1, make.names = 'X1')
             Title:       Phone:         Email: Previous College:
1 Head Coach, Year2 123-456-7890 name@email.com          The Best

你也可以這樣做:

read.dcf(textConnection(do.call(paste, df)), all = TRUE)
              Title        Phone          Email Previous College
1 Head Coach, Year2 123-456-7890 name@email.com         The Best

另一種使用data.table方法 -

library(data.table)

dcast(setDT(df), rowid(X1)~sub(':', '', X1, fixed = TRUE), value.var = 'X2')

#   X1          Email        Phone Previous College             Title
#1:  1 name@email.com 123-456-7890         The Best Head Coach, Year2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM