У меня есть матрица (именованные точки в этом примере) с большим количеством строк (< 90 000) и всего две колонки.Матрица с большим количеством строк
A B
1 10.1
2 9.2
3 4.5
1 8.9
1 0.7
Я хочу, чтобы создать еще одну матрицу только уникальных значений из столбца «А» и среднее из значений столбца «B», которые соответствуют дублированные значения (ов) .Result: -
A B
1 6.56
2 9.20
3 4.50
В настоящее время я использую это (ниже кода), который занимает много времени. Поэтому я был бы очень благодарен, если кто-то может посоветовать мне, как ускорить эти расчеты.
uniquedata<-points[which(!duplicated(points[,"A"])),]
reps<-points[which(duplicated(points[,"A"])),]
result<-list()
intensity<-list()
for(i in c(1:length(uniquedata[,"A"]))){
result[[i]]<-which(uniquedata[i,"A"]==reps[,"A"])
}
for(j in c(1:length(result))){
if(length(result[[j]])!=0){
intensity[j]<-mean(c(reps[result[[j]],"B"],uniquedata[j,"B"]))
}else{
intensity[j]<-uniquedata[j,"B"]
}
}
points1<-cbind(uniquedata[,1],unlist(intensity))
Я понимаю, что я делаю много индексирования, поэтому он медленный. Заранее благодарим за помощь!
Если у вас возникает соблазн использовать циклы 'for', подобные этому в R, вы всегда должны сделать шаг назад и спросить себя, если это может быть общей задачей. Тогда вам нужно только подумать о поисковых терминах. – Roland
Действительно, я буду в будущем. Спасибо за совет! – jsin