【发布时间】:2013-11-17 19:58:16
【问题描述】:
我有这组序列,其中包含 2 个变量作为第三个变量(设备)。现在我想将每个设备的序列分成 300 个组。dsl 是一个数据帧,其中包含 d 是设备 ID,s 是长度为 300 的序列数。
首先,我标记(列Sid)所有序列rep(1,300),然后是rep(2,300),依此类推,直到rep(s,300)。需要忽略未标记的任何内容,即带有初始化标签(= 0)的内容。实际的标记发生在 seqid 向量上。
我必须这样做,因为我想堆叠 300 个数据点的集合,然后转置它。这将形成我的 predata data.frame 的一行。对于每个 predata 数据帧,我正在做一个 k-means 来生成 5 个我存储在最终数据中的集群。
基本上对于每个设备,我都会有 5 个集群,然后我可以通过引用最终数据中的行号(映射到设备 ID)来拉取这些集群。
#subset processed data by device
for (ds in 1:387){
d <- dsl[ds,1]
s <- dsl[ds,3]
temp.data <- subset(data,data$Device==d)
temp.data$Sid <- 0
temp.data[1:(s*300),4] <- rep(1:300,s)
temp.data <- subset(temp.data,temp.data$Sid!="0")
seqid <- NA
for (j in 1:s){ seqid[(300*(j-1)+1):(300*j)] <- j }
temp.data$Sid <- seqid
predata <- as.data.frame(matrix(numeric(0),s,600))
for(k in 1:s){
temp.data2 <- subset(temp.data[,c(1,2)], temp.data$Sid==k)
predata[k,] <- t(stack(temp.data2)[,1])
}
ob <- kmeans(predata,5,iter.max=10,algorithm="Hartigan-Wong")
finaldata <- rbind(finaldata,(unique(fitted(ob,method="centers"))))
}
作为 R 的菜鸟,我最终得到了 3 个嵌套循环(该函数确实适用于最外层循环为一个值)。这需要 5 小时并运行。需要一种更快的方法来解决这个问题。
我们将不胜感激。
谢谢
【问题讨论】:
-
你能provide a sample of your dataset吗?
head(data)?解析发生的事情有点困难。
标签: r nested vectorization