2017-01-20 19 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"출력에 대해 152x90 매트릭스/데이터 프레임을 제공하기를 바랍니다. "data1 [i]- b $ data $ d1 : object 'data1'오류가 발견되었습니다. 빈 목록을 만들려고했으나 다른 오류가 있습니다."대체 할 항목 수는 대체 길이의 배수가 아닙니다. 나는 여러 열을 통해 기능을 적용하기 위해 노력하고 있기 때문에 ".

또한

이는가() 기능을 적용 사용할 수있는 좋은 시간이 될 것입니다?

어떤 도움을 크게 감상 할 수있다. 당신에게

감사

편집 : 여기 내 샘플 데이터입니다.이 함수는 열 V1을 입력으로 사용하여 동일한 길이의 4 열 벡터를 출력합니다 (b $ 데이터 $ 1에서 b $ 데이터 $ 4). wavMODWT 함수는 wmtsa패키지에 있습니다. wavMODWT 이후 967,

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

내가 docs 페이지에 포함 된 R 콘솔에서이 객체에 주위를 연주하는 wavTransform 클래스 개체를 반환합니다.

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

@ Parfait에 감사드립니다. – dj20

+0

노력에 감사를 표하거나 감사드립니다. 이 답변이 도움이 되었으면 해결 방법을 확인하십시오. – Parfait