假定以下數據幀:
Application <- c('A','A','B','B','B','C','C','D')
Rating <- c('0','0.6','0.6','2.0','2.0','3.8','3.8','3.9')
DF <- data.frame(Application,Rating)
DF
#Application Score
#1 A 0
#2 A 0.6
#3 B 0.6
#4 B 2.0
#5 B 2.0
#6 C 3.8
#7 C 3.8
#8 D 3.9
我想創建一個空的結果表,以通過一個循環來填充: 第一柱 - 顯示等級被計算(例如0.6) 第二列 - 顯示DF 第三列中評級的次數 - 列出DF中評級的總數(即8) 第四列 - 計算該評級相對於整體R用於循環異常擴大範圍時
#create empty results table
results_rating_bins <- as.data.frame(matrix(nrow = 1, ncol = 4))
#initiate row count
rownr = 1
#Loop:
for (rating in seq(from = 0, to = 4.0, by = 0.1)) {
this_rating <- subset(DF, DF$Score == rating)
results_rating_bins[rownr, 1] = rating
results_rating_bins[rownr, 2] = nrow(this_rating)
results_rating_bins[rownr, 3] = nrow(DF)
results_rating_bins[rownr, 4] = nrow(this_rating)/nrow(DF)
rownr <- rownr + 1
}
最後的結果是我所期望的,除了等級2.0,其中計數,即使0應該是2
這說明在小規模的,我在規模較大看到30K的線數據集。我有一個評分從0到4.9的應用程序列表,因此我的循環範圍將設置爲0到4.9,而不是0.6到4.0。但是,當我在大數據集上運行循環時,最終會得到一些評級計數爲0的實例,即使它不應該是這樣。更奇怪的是,通過玩弄範圍,發生異常(即計數= 0)的評級完全隨機地變化。
任何想法可以證明這種行爲的理由?
大赦
[R FAQ 7.31](https://cran.r-project.org/doc幀的總數/FAQ/R-FAQ.html#Why-doesn_0027t-R-think-these-numbers-are-equal_003f)?編輯:無視,你正在做'字符'數字比較。 – r2evans
雖然不是7.31,但它仍然相關...由於您正在將一個數字(0到4.0之間的數字)與一個「字符」進行比較,因此該數字會被上轉換爲一個字符。並猜測'as.character(2.0)'轉換成什麼? (提示:不是'「2.0」'。)也許你更喜歡使用'for(格式爲(seq(...),format =「%0.1f」))''的格式。 – r2evans