繁体   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