2017-01-20 3 views
0

私はRにはかなり新しく、データのウェーブレット関数から出力を取得しようとしています。私のデータは、[152,90]、90の変数から152の時点で構成されています。私は各時系列(列)をウェーブレットに変換したいと思います。私は1 timeseriesのウェーブレットを得ることができ、列をループし、異なる変数で必要な4つの異なる出力を得ることを試みました。ウェーブレット関数の出力からさまざまな変数を取得するR

data <- read.table(data.txt,sep = "\t") 
rois <- seq(1,90,by = 1) 
for (i in 1:length(rois)) { 
a <- data[,i] 
b <- wavMODWT(a, wavelet = "s14", n.levels = 4) 
data1.d1[i] <- b$data$d1 
data1.d2[i] <- b$data$d2 
data1.d3[i] <- b$data$d3 
data1.d4[i] <- b$data$d4 
} 

私はこれが私にwavMODT機能からそれぞれ「D」の出力のための152×90のマトリックス/データフレームを与えるだろうと期待していました。私は "data1 [i]のエラーを取得する< - b $ data $ d1:オブジェクト 'data1'が見つかりません。空リストを作成しようとしましたが、別のエラーが発生しました。"置き換える項目の数は、 」。

また、これは私が複数の列の上に関数を適用しようとしていますので、適用されます()関数を使用するには良い時間でしょう?

任意の助けいただければ幸いです。 は

ありがとう

編集:ここに私のサンプルデータです。この関数は、列V1を入力とし、同じ長さの4つの列ベクトルを出力します(b $データ$ 1からb $データ$ 4)。wavMODWT関数はwmtsa

V1  V2  V3  V4  V5  V6 
1 1321.837 1353.712 1250.450 1183.120 1263.095 1298.410 
2 1327.204 1360.711 1249.475 1181.297 1266.686 1294.568 
3 1328.402 1362.084 1249.310 1177.071 1271.967 1295.823 
4 1327.890 1366.335 1248.203 1173.392 1273.039 1295.118 
5 1327.157 1370.059 1252.110 1177.771 1274.428 1300.177 
6 1329.278 1370.950 1250.477 1177.238 1277.021 1294.408 
7 1330.106 1363.459 1247.602 1176.267 1272.182 1296.256 
8 1327.378 1364.607 1248.047 1178.523 1271.818 1293.098 
9 1327.867 1363.442 1245.530 1175.825 1268.713 1295.788 
+0

さらに、私は211の被験者があり、それぞれ90の変数から152の時点を有する。 forループなしですべてのサブジェクトからウェーブレット出力を取得するためのショートカットはありますか? – dj20

+0

データの再現性のある小さな例を提供できますか?あなたの質問にもっと簡単に答えることができます。 – BLT

+0

@BLTにお返事ありがとうございます。私は主な質問を編集して私のデータのサンプルを含めました。 – dj20

答えて

1

wavMODWTwavTransformクラスオブジェクトを返すので、私はdocsページに埋め込まれたRコンソールでこのオブジェクトの周り果たしました。

lapplyを使用して、それぞれ係数ベクトルの4つの列を持つデータフレームのリストを取得することを検討してください。明確な211を受信する別のlapplyに割り当て、上記ラップ被験者全体で繰り返し処理する

data <- read.table(data.txt, sep = "\t") 

# CREATING LIST OF DATA FRAMES 
dfList <- lapply(seq(ncol(data)), function(s) { 
    W <- wavMODWT(s, wavelet = "s14", n.levels = 4) 

    data.frame(list(d1=as.vector(W$data$d1)), 
       list(d2=as.vector(W$data$d4)), 
       list(d3=as.vector(W$data$d3)), 
       list(d4=as.vector(W$data$d4))) 
}) 

# NAMING EACH ELEMENT IN DF LIST TO CORRESPONDING COLUMN NAME 
dfList <- setNames(dfList, colnames(data)) 

:データフレームの数は、あなたがlapplyに渡す列の数は、具体的にあなたの時系列入力なので、N = 90に等しくなりますサブジェクトデータセットを入力として最終的に211 dfListsのリストを出力し、それぞれのデータフレームは90です。以下の例では、テキストファイルからデータを取得することを想定しています。

datatxts <- list.files(path="/path/to/folder", pattern=".txt") 

subjectsList <- lapply(datatxts, function(d) { 

    dfList <- lapply(seq(ncol(d)), function(s) { ... }) 
    setNames(dfList, colnames(d)) 
}) 

subjectsList <- setNames(subjectsLists, gsub(".txt", "", datatxts)) 
+0

@パルフェットありがとう – dj20

+0

努力してくれてありがとう、それとも働いてくれてありがとうか分かりません。この回答が役に立った場合は、それを受け入れて(横にチェックマークを付けて)解決を確認してください。 – Parfait

関連する問題