base R
1) scan
sub
- =
, sub
data.frame
matrix
, scan
vector
. (c(FALSE, TRUE)
) "v1" "df2", unique
, "v1", c(TRUE, FALSE)
vector
.
df2 <- df1
v1 <- scan(text=sub("=\\s+", "", as.matrix(df1)), what="", sep=" ", quiet=TRUE)
df2[] <- v1[c(FALSE, TRUE)]
colnames(df2) <- unique(v1[c(TRUE, FALSE)])
df2
2) sub
- , (\\1
) (lapply(df1, ..
)
df2[] <- lapply(df1, function(x) sub(".*\\b(\\w+)$", "\\1", x))
3) strsplit
- ("=\\s+
) (tail, 1
) , 2)
df2[] <- lapply(df1, function(x) sapply(strsplit(x, "=\\s+"), tail, 1))
2- 3- , sub
unlist
ted
colnames(df2) <- sub("\\s+=.*", "", unlist(df1[1,], use.names = FALSE))
1) str_extract
- (\\w+
) $
lapply
list
('df2'). , sub
unlist
ed.
library(stringr)
df2[] <- lapply(df1, function(x) str_extract(x, "\\w+$"))
colnames(df2) <- word(unlist(df1[1,]), 1)
df2
# Auto Engine Trans
#1 Chevy V6 Auto
#2 Chevy V8 Manual
#3 Chevy V10 Manual
2) tidyverse
library(dplyr)
library(tidyr)
gather(df1) %>%
separate(value, into = c("header", "value")) %>%
group_by(key) %>%
mutate(i1 = row_number()) %>%
ungroup() %>%
select(-key) %>%
spread(header, value) %>%
select(-i1)
# A tibble: 3 × 3
# Auto Engine Trans
#* <chr> <chr> <chr>
#1 Chevy V6 Auto
#2 Chevy V8 Manual
#3 Chevy V10 Manual
df1 <- structure(list(V1 = c("Auto = Chevy", "Auto = Chevy", "Auto = Chevy"
), V2 = c("Engine = V6", "Engine = V8", "Engine = V10"), V3 = c("Trans = Auto",
"Trans = Manual", "Trans = Manual")), .Names = c("V1", "V2",
"V3"), class = "data.frame", row.names = c(NA, -3L))