2017-02-28 18 views
0

長い形式のデータを1行の形式に変更しようとしています。長い形式のデータを1行の形式のデータに変換する

id var1 var2 var3 
1  a b c 
2  d e f 
3  g h i 

以下は、データを最後まで見たい方法です。

id.1 var1.1 var2.1 var3.1 id.2 var1.2 var2.2 var3.2 id.3 var1.3 var2.3 var3.3 
1   a  b  c 2  d  e  f 3  g  h  i 

私はtidyrパッケージとreshapeを使用してみましませんが、どちらも私がやりたいことが可能であるように見えるしました。どんな助けでも大歓迎です。

+0

私はちょうど 'unlist(df)'があなたの望むことをしていると思います。(あなたには何もありません。あるいは 'c(t(df))'は、名前のない順番で値を与えます。 –

+0

または、私は 'do.call(cbind、split(mydf、1:nrow(mydf)))'と思っていますが、* why *? – A5C1D2H2I1M1N2O1R2T1

答えて

1

カラムタイプを維持することが重要な場合は、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は、期待していた列名を取得できます。


または、(2つの追加の列、値が「1」で満たされた1つ、1からデータセット内の行数に配列と他を追加し、あなたの「ID」としてそれを使用することができますreshape関数、またはvalue.varの複数の変数を受け入れるバージョンのdcastのようなものを使用して、 "LHS"と "時間"(RHS)

関連する問題