У меня есть этот набор последовательностей с 2 переменными для третьей переменной (устройства). Теперь я хочу, чтобы разбить последовательность для каждого устройства в наборы 300. dsl
представляет собой кадр данных, который содержит d
быть идентификатор устройства и s
является количество последовательностей длины 300.Избегайте вложенных циклов в R
Во-первых, я мечения (колонка Sid
) все последовательности rep(1,300)
, за которыми следует rep(2,300)
и т. д. до rep(s,300)
. Все, что остается незамеченным, то есть с инициализированными метками (= 0), нужно игнорировать. Фактическая маркировка происходит только с seqid
.
Мне нужно было сделать это, поскольку я хочу складывать наборы из 300 точек данных, а затем транспонировать их. Это сформировало бы один ряд моих данных predata data.frame. Для каждого кадра данных predata я делаю k-средство для создания 5 кластеров, которые храню в конечных данных.
По существу для каждого устройства у меня будет 5 кластеров, которые я могу извлечь, указав номер строки в окончательных данных (сопоставленных с идентификатором устройства).
#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 часов и работает. Нужен более быстрый способ сделать это.
Любая помощь будет оценена по достоинству.
Благодаря
Можете ли вы [предоставить образец вашего набора данных] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)? 'головка (данные)'? Трудно разобрать, что происходит. – bnjmn