2017-02-25 5 views
0

新しい調査データのこの不便なセットを使用可能な形式にすることには本当に感謝しています。それは奇妙な方法で収集され、今私は奇妙なデータを扱うことができます。私は整頓を見て終わりまでこれらのアプローチを使用しました。私は自分の問題は、私はこのデータセットについてすべて間違っていると思っていると思っています。しかし、私がこのdfに行う必要があるすべての事柄を考えれば、私はどこから始めるべきか、そしてどこでグーグルを始めるべきかを理解することはできません。私は必要なものグループIDを保持しながらデータセットをワイドからロングに変更し、カラムを集める

: 一人一人が自分の行 であるためには一人一人が自分のグループIDを保持し、カラム(年齢、体重、身長)になるために、個別に、現在、それぞれの人に添付の変数について値 をあしらった

偽物(さらにはるかに小さい):

structure(list(GroupID = 1:5, Treated = c("Y", "Y", "N", "Y", 
"N"), person1_age = c(45L, 33L, 71L, 19L, 52L), person1_weight = c(187L, 
145L, 136L, 201L, 168L), person1_height = c(69L, 64L, 51L, 70L, 
66L), person2_age = c(54L, 20L, 48L, 63L, 26L), person2_weight = c(140L, 
122L, 186L, 160L, 232L), person2_height = c(62L, 70L, 65L, 72L, 
74L), person3_age = c(21L, 56L, 40L, 59L, 67L), person3_weight = c(112L, 
143L, 187L, 194L, 159L), person3_height = c(61L, 69L, 73L, 63L, 
72L)), .Names = c("GroupID", "Treated", "person1_age", "person1_weight", 
"person1_height", "person2_age", "person2_weight", "person2_height", 
"person3_age", "person3_weight", "person3_height"), row.names = c(NA, 
5L), class = "data.frame") 

私に指摘できる点やご指摘がありましたら、非常に感謝しています。

答えて

1

reshapeは、適切な引数を指定して、これを行うことができます。

> reshape(x, direction="long", varying=names(x)[3:11], timevar='person', v.names=c('height', 'age', 'weight'), sep='_') 
    GroupID Treated person height age weight id 
1.1  1  Y  1 187 45  69 1 
2.1  2  Y  1 145 33  64 2 
3.1  3  N  1 136 71  51 3 
4.1  4  Y  1 201 19  70 4 
5.1  5  N  1 168 52  66 5 
1.2  1  Y  2 140 54  62 1 
2.2  2  Y  2 122 20  70 2 
3.2  3  N  2 186 48  65 3 
4.2  4  Y  2 160 63  72 4 
5.2  5  N  2 232 26  74 5 
1.3  1  Y  3 112 21  61 1 
2.3  2  Y  3 143 56  69 2 
3.3  3  N  3 187 40  73 3 
4.3  4  Y  3 194 59  63 4 
5.3  5  N  3 159 67  72 5 

これは、元のデータに昇順であること、varying引数に、元のデータ内の列の順序に依存しています。

そうでない場合は、varyingを手動で指定してください。ここでは上記で使用されているものです:我々はまた、measure引数に複数のpatternsを取ることができたdata.tableからmeltを使用することができます

> names(x)[3:11] 
[1] "person1_age" "person1_weight" "person1_height" "person2_age" "person2_weight" "person2_height" 
[7] "person3_age" "person3_weight" "person3_height" 
0

library(data.table) 
melt(setDT(x), measure = patterns("age$", "weight$", "height$"), 
    variable.name = "person", value.name = c("age", "weight", "height")) 
#  GroupID Treated person age weight height 
# 1:  1  Y  1 45 187  69 
# 2:  2  Y  1 33 145  64 
# 3:  3  N  1 71 136  51 
# 4:  4  Y  1 19 201  70 
# 5:  5  N  1 52 168  66 
# 6:  1  Y  2 54 140  62 
# 7:  2  Y  2 20 122  70 
# 8:  3  N  2 48 186  65 
# 9:  4  Y  2 63 160  72 
#10:  5  N  2 26 232  74 
#11:  1  Y  3 21 112  61 
#12:  2  Y  3 56 143  69 
#13:  3  N  3 40 187  73 
#14:  4  Y  3 59 194  63 
#15:  5  N  3 67 159  72 
関連する問題