[英]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.