Tôi đang cố gắng viết một chương trình có khung dữ liệu lớn và thay thế từng cột giá trị theo tần số tích lũy của các giá trị đó (sắp xếp tăng dần). Ví dụ, nếu cột của giá trị là: 5, 8, 3, 5, 4, 3, 8, 5, 5, 1. Sau đó các tần số tương đối và tích lũy là:thay thế hiệu quả khung dữ liệu với tần số tích lũy
- 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 = 1.0
Sau đó, đồng gốc lumn trở thành: 0.8, 1.0, 0.3, 0.8, 0.4, 0.3, 1.0, 0.8, 0.8, 0.1
Đoạn mã sau thực hiện thao tác này một cách chính xác, nhưng quy mô kém có thể do vòng lặp lồng nhau. Bất kỳ ý tưởng làm thế nào để thực hiện nhiệm vụ này hiệu quả hơn?
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]]
}
}
Bạn có thể cho chúng ta một [ví dụ tái sản xuất] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-exa mple)? –