Тегами к вопросу являются r, reshape и reshape2, поэтому мы показываем решения с использованием каждого из них.
1) xtabs Основным решением R является следующее.
let <- gsub("\\d", "", names(DF))
num <- gsub("\\D", "", names(DF))
tab <- xtabs(unlist(DF) ~ let + num)
предоставление:
> tab
num
let 1 2
A 10 5
B 11 5
C 21 10
или для фрейма данных:
cbind(let = rownames(tab), as.data.frame.matrix(tab))
предоставление:
let 1 2
A A 10 5
B B 11 5
C C 21 10
2) изменить форму Другое базовое решение R заключается в следующем.let
и num
сверху.
varying <- split(names(DF), num)
reshape(DF, dir = "long", varying = varying, v.names = names(varying),
times = unique(let), timevar = "let")[-4]
, дающие:
let 1 2
1.A A 10 5
1.B B 11 5
1.C C 21 10
3) reshape2 Использование let
и num
сверху:
library(reshape2)
dcast(let ~ num, data = data.frame(value = unlist(DF)), value.var = "value")
подача:
let 1 2
1 A 10 5
2 B 11 5
3 C 21 10
Примечание
Ввод в воспроизводимой форме:
Lines <- "
A1 A2 B1 B2 C1 C2
10 5 11 5 21 10"
DF <- read.table(text = Lines, header = TRUE)