"" "" "" . R reshape , id.
reshape(df, direction = "long", varying = names(df), sep = "_")
.
, , "reshape2" ( ):
library(reshape2)
dfL <- melt(as.matrix(df))
dfL <- cbind(dfL, colsplit(dfL$Var2, "_", c("Factor", "Individual")))
dcast(dfL, Individual + Var1 ~ Factor, value.var="value")
, "data.table" 1.8.11 "" "dcast". , . , , , "id".
library(reshape2)
library(data.table)
packageVersion("data.table") ## Must be at least 1.8.11 to work
# [1] β1.8.11β
DT <- data.table(cbind(id = sequence(nrow(df)), df))
DTL <- melt(DT, id.vars="id")
DTL[, c("Fac", "Ind") := colsplit(variable, "_", c("Fac", "Ind"))]
dcast.data.table(DTL, Ind + id ~ Fac)
# Ind id A B
# 1: 1 1 1 10
# 2: 1 2 2 11
# 3: 1 3 3 12
# 4: 2 1 4 13
# 5: 2 2 5 14
# 6: 2 3 6 15
# 7: 3 1 7 16
# 8: 3 2 8 17
# 9: 3 3 9 18
Update
- merged.stack splitstackshape. , as.data.table(df, keep.rownames = TRUE), data.table(cbind(id = sequence(nrow(df)), df)) "data.table".
library(splitstackshape)
merged.stack(as.data.table(df, keep.rownames = TRUE),
var.stubs = c("A", "B"), sep = "_")
/, "tidyr" + "dplyr".
library(tidyr)
library(dplyr)
df %>%
gather(var, value, A_1:B_3) %>%
separate(var, c("var", "time")) %>%
group_by(var, time) %>%
mutate(grp = sequence(n())) %>%
ungroup() %>%
spread(var, value)
# Source: local data frame [9 x 4]
#
# time grp A B
# 1 1 1 1 10
# 2 1 2 2 11
# 3 1 3 3 12
# 4 2 1 4 13
# 5 2 2 5 14
# 6 2 3 6 15
# 7 3 1 7 16
# 8 3 2 8 17
# 9 3 3 9 18