Büyük bir veri çerçevesi alan ve her değer sütununu bu değerlerin birikimli sıklığına göre değiştiren bir program yazmaya çalışıyorum (artan sıralı). değerlerinin sütun bulunmaktadır Örneğin, 5, 8, 3, 5, 4, 3, 8, 5, 5, 1 O göreli ve kümülatif frekansları:Veri çerçevesini kümülatif frekansla etkin bir şekilde değiştirme
- 1: rel_freq = 0.1, cum_freq = 0.1
- 3: rel_freq = 0.2, cum_freq = 0.3
- 4: rel_freq = 0.1, cum_freq = 0.4
- 5: rel_freq = 0.4, cum_freq = 0.8
- 8: rel_freq = 0.2, cum_freq =
Daha sonra orijinal Lumn: 0,8, 1,0, 0,3, 0,8, 0,4, 0,3, 1,0, 0,8, 0,8, 0,1
Aşağıdaki kod, bu işlemi doğru şekilde gerçekleştirir, ancak büyük olasılıkla iç içe geçmiş döngü nedeniyle yetersiz ölçeklenir. Bu görevi nasıl daha verimli gerçekleştirebileceğine dair bir fikriniz var mı?
mydata = read.table(.....)
totalcols = ncol(mydata)
totalrows = nrow(mydata)
for (i in 1:totalcols) {
freqtable = data.frame(table(mydata[,i])/totalrows) # create freq table
freqtable$CumSum = cumsum(freqtable$Freq) # calc cumulative freq
hashtable = new.env(hash=TRUE)
nrows = nrow(freqtable)
# store cum freq in hash
for (x in 1:nrows) {
dummy = toString(freqtable$Var1[x])
hashtable[[dummy]] = freqtable$CumSum[x]
}
# replace original data with cum freq
for (j in 1:totalrows) {
dummy = toString(mydata[j,i])
mydata[j,i] = hashtable[[dummy]]
}
}
Bize bir verebilir [tekrarlanabilir örnek] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-exa mple)? –