我是R的新手,我正在尝试从我的数据中获取小波函数的输出。我的数据结构为[152,90],来自90个变量的152个时间点。我想将每个时间序列(列)转换为小波。我能够获得1个时间序列的小波,并尝试遍历列并在不同的变量中获得我想要的4个不同输出。
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 x 90的矩阵/数据帧。我得到“data1 [i]&lt; -b $ data $ d1:object'data1'中找不到错误。我试图将data1设为空列表,但又出现了另一个错误”要替换的项目数不是替换项的倍数长度“。
另外,这是使用apply()函数的好时机,因为我试图在多列上应用函数吗?
非常感谢任何帮助。 谢谢
编辑:这是我的示例数据。该函数将列V1作为输入,并输出4个相同长度的列向量(b $ data $ 1到b $ data $ 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 :(得分:1)
由于wavMODWT会返回 wavTransform 类对象,因此我在docs页面的嵌入式R控制台中使用了此对象。
考虑使用lapply
检索数据帧列表,每个数据帧包含4列系数向量。数据帧的数量等于您传入lapply
的列数,特别是您的时间序列输入,因此N = 90:
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
中的分配包裹在接收211个不同主题数据集作为输入的分配上,以最终输出211 dfLists 的列表,每个 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))