如果維護列類型是有意義的,您可以嘗試do.call(cbind, split(mydf, 1:nrow(mydf)))
。
例子:
mydf <- structure(list(id = 1:3, var1 = structure(1:3, .Label = c("a",
"d", "g"), class = "factor"), var2 = c("b", "e", "h"), var3 = c("c",
"f", "i")), .Names = c("id", "var1", "var2", "var3"), row.names = c(NA,
3L), class = "data.frame")
^^這就好比你的數據,但 「VAR1」 列是一個因素。
do.call(cbind, split(mydf, 1:nrow(mydf)))
# 1.id 1.var1 1.var2 1.var3 2.id 2.var1 2.var2 2.var3 3.id 3.var1 3.var2 3.var3
# 1 1 a b c 2 d e f 3 g h i
str(.Last.value)
# 'data.frame': 1 obs. of 12 variables:
# $ 1.id : int 1
# $ 1.var1: Factor w/ 3 levels "a","d","g": 1
# $ 1.var2: chr "b"
# $ 1.var3: chr "c"
# $ 2.id : int 2
# $ 2.var1: Factor w/ 3 levels "a","d","g": 2
# $ 2.var2: chr "e"
# $ 2.var3: chr "f"
# $ 3.id : int 3
# $ 3.var1: Factor w/ 3 levels "a","d","g": 3
# $ 3.var2: chr "h"
# $ 3.var3: chr "i"
^^請注意,列類是保留的。
有點gsub
可以得到列名是你所期待的。
或者,您可以從1數據集中添加兩個附加列,一個充滿值爲「1」,其他同序列的行數,並使用它作爲你的「ID」( LHS)和「時間」(RHS)變量與reshape
函數或data.table
版本的dcast
接受多個變量value.var
。
我認爲只是'unlist(df)'做了你想做的事情(假設你沒有任何因素,而且你不關心訂單)。或'c(t(df))'將給出所需順序的值,但沒有名稱。 –
或者,我想'do.call(cbind,split(mydf,1:nrow(mydf)))',但是*爲什麼*? – A5C1D2H2I1M1N2O1R2T1