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