2017-04-05 5 views
0

データをワイドからロングに変換しようとしています。私はID変数と131列の時間データを持っています。すべての列は整数形式です。データはcsv形式でインポートされました。ここで形状変更を使用してワイドからロングに変換する際の問題?

> class(ECGHR) 
[1] "tbl_df"  "tbl"  "data.frame" 

データの最初の6行は22時間と共に変化する変数のためのものである:ここでは

> head (ECGHR) 
# A tibble: 6 × 132 
id T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 T15 T16 T17 T18 T19 T20 T21 T22 
<int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> <int> 
1 2003 70 65 69 71 68 74 67 65 60 66 59 99 74 73 87 94 88 88 98 73 72 63 79 
2 2004 98 105 85 87 83 83 77 71 75 73 73 71 87 74 79 75 72 71 71 68 86 72 73 
3 2008 93 92 91 90 93 88 89 83 93 96 95 94 89 91 87 93 88 100 93 92 89 93 83 
4 2010 71 69 74 71 74 68 74 68 78 75 81 72 74 77 74 70 64 68 65 69 66 73 75 
5 2018 90 86 93 91 86 82 97 95 95 83 79 88 78 92 86 94 83 79 96 91 72 78 80 
6 2019 60 58 59 58 66 68 73 77 58 110 56 56 53 49 73 56 45 50 46 45 46 54 50 

は私のリシェイプコードです:ここで

ECGHR_long=reshape(ECGHR, varying=c(2:132), direction="long", idvar="id", sep="") 

は警告メッセージです:

Error in `row.names<-.data.frame`(`*tmp*`, value = paste(d[, idvar], times[1L], : invalid 'row.names' length 
In addition: Warning message: 
Setting row names on a tibble is deprecated. 

データフレームを使って作業しているのですが、なぜ私がRに慣れていないのかはわかりません。それをdatフレームに変換する必要がありますか?私はどんな洞察にも非常に感謝しています!

+0

'tidyr'パッケージから' gather'が 'reshape'と同じことをしますが、私はそれをより直感的に使うことができます。この場合、 'ECGHR_long <- ECGHR %>%gather(key =" T "、value =" value "、 - id)' –

+0

ありがとう!それは完璧に働いた。 –

答えて

2

これを試してみてくださいRのベースにreshape機能を使用するには - 。それは自分自身を1つを把握することができますので、我々はidvar="id"を省略しているが、あなたはそれを追加する場合、それは傷つけることはありません

reshape(as.data.frame(ECGHR), dir = "long", varying = list(2:ncol(ECGHR)), 
    times = names(ECGHR)[-1]) 
##   id time T0 
## 2003.T0 2003 T0 70 
## 2004.T0 2004 T0 98 
## 2008.T0 2008 T0 93 
## 2010.T0 2010 T0 71 
## 2018.T0 2018 T0 90 
## 2019.T0 2019 T0 60 
## etc. 

かreshape2パッケージを使用して:

library(reshape2) 
melt(ECGHR, id.vars = 1) 

##  id variable value 
## 1 2003  T0 70 
## 2 2004  T0 98 
## 3 2008  T0 93 
## 4 2010  T0 71 
## 5 2018  T0 90 
## 6 2019  T0 60 

注:

Lines <- "id T0 T1 T2 T3 T4 T5 T6 T7 T8 T9 T10 T11 T12 T13 T14 T15 T16 T17 T18 T19 T20 T21 T22 
1 2003 70 65 69 71 68 74 67 65 60 66 59 99 74 73 87 94 88 88 98 73 72 63 79 
2 2004 98 105 85 87 83 83 77 71 75 73 73 71 87 74 79 75 72 71 71 68 86 72 73 
3 2008 93 92 91 90 93 88 89 83 93 96 95 94 89 91 87 93 88 100 93 92 89 93 83 
4 2010 71 69 74 71 74 68 74 68 78 75 81 72 74 77 74 70 64 68 65 69 66 73 75 
5 2018 90 86 93 91 86 82 97 95 95 83 79 88 78 92 86 94 83 79 96 91 72 78 80 
6 2019 60 58 59 58 66 68 73 77 58 110 56 56 53 49 73 56 45 50 46 45 46 54 50" 

ECGHR <- read.table(text = Lines, header = TRUE) 
私たちは、この入力を使用
+0

あなたの提案をありがとう。私は再構成を使用すると私の質問に掲載されたのと同じエラーメッセージが表示されます。 –

+0

'reshape'がtibblesを好まない場合は、' ECGHR'を 'as.data.frame(ECGHR)'に置き換えてみてください。いずれにしても、私の答えのコードは、生成された出力からわかるように、最後の注釈の入力に適用されたときに機能します。 –

関連する問題