![](/img/trans.png)
[英]How to generate a frequency table in R with with cumulative frequency and relative frequency
[英]How to generate bin frequency table in R?
對於以下示例,我如何對大小為 0.1 的數據進行 bin 處理。
x<-c(0.01,0.34,0.45,0.67,0.89,0.12,0.34,0.45,0.23,0.45,0.34,0.32,0.45,0.21,0.55,0.66,0.99,0.23,.012,0.34)
range frequency
0.1-0.2 a
0.2-0.3 b
0.3-0.4 c
................
................
................
................
問候
關於@akrun 解決方案,我會從文檔?cut
中發布一些有用的信息,以防萬一:
筆記
代替
table(cut(x, br))
,hist(x, br, plot = FALSE)
效率更高,內存占用更少。
因此,如果有大量數據,我寧願選擇:
br = seq(0,1,by=0.1)
ranges = paste(head(br,-1), br[-1], sep=" - ")
freq = hist(x, breaks=br, include.lowest=TRUE, plot=FALSE)
data.frame(range = ranges, frequency = freq$counts)
# range frequency
#1 0 - 0.1 2
#2 0.1 - 0.2 1
#3 0.2 - 0.3 3
#4 0.3 - 0.4 5
#5 0.4 - 0.5 4
#6 0.5 - 0.6 1
#7 0.6 - 0.7 2
#8 0.7 - 0.8 0
#10 0.9 - 1 1
嘗試
as.data.frame(table(cut(x, breaks=seq(0,1, by=0.1)), dnn="Range"))
基於@Colonel Beauvel 的回答,
一個 bin 頻率表函數。 (直方圖)。
binFreqTable <- function(x, bins) {
freq = hist(x, breaks=bins, include.lowest=TRUE, plot=FALSE)
ranges = paste(head(freq$breaks,-1), freq$breaks[-1], sep=" - ")
return(data.frame(range = ranges, frequency = freq$counts))
}
例子:
> binFreqTable(x,c(0,.3,.6,1))
# range frequency
#1 0 - 0.3 6
#2 0.3 - 0.6 10
#3 0.6 - 1 4
> binFreqTable(x,5)
# range frequency
#1 0 - 0.2 3
#2 0.2 - 0.4 8
#3 0.4 - 0.6 5
#4 0.6 - 0.8 2
#5 0.8 - 1 2
> binFreqTable(x,seq(0,1,by=0.1))
# range frequency
#1 0 - 0.1 2
#2 0.1 - 0.2 1
#3 0.2 - 0.3 3
#4 0.3 - 0.4 5
#5 0.4 - 0.5 4
#6 0.5 - 0.6 1
#7 0.6 - 0.7 2
#8 0.7 - 0.8 0
#9 0.8 - 0.9 1
#10 0.9 - 1 1
Akrun 的回答很好,但並沒有讓我去格式化。
x<-c(0.01,0.34,0.45,0.67,0.89,0.12,0.34,0.45,0.23,0.45,0.34,0.32,0.45,0.21,0.55,0.66,0.99,0.23,.012,0.34)
cuts<-cut(x, breaks=seq(0,1, by=0.1))
counts<-c(t(table(cuts)))
#Here's the important part for me, formatting the cuts for display in the data frame:
labs <- levels(cuts)
lable_matrix<-cbind(lower = as.numeric( sub("\\((.+),.*", "\\1", labs) ),
upper = as.numeric( sub("[^,]*,([^]]*)\\]", "\\1", labs) ))
cut_frame<-data.frame(lable_matrix,counts)
# lower upper counts
#1 0.0 0.1 2
#2 0.1 0.2 1
#3 0.2 0.3 3
#4 0.3 0.4 5
#5 0.4 0.5 4
#6 0.5 0.6 1
#7 0.6 0.7 2
#8 0.7 0.8 0
#9 0.8 0.9 1
#10 0.9 1.0 1
這是我所做的:
x <- sort(x)
start <- min(x)
len <- 0.002
end <- start + len
freq_table <- data.frame(start=c(NA), end=c(NA), count=c(NA))
count <- 0
for (i in (1:length(x))) {
if (x[i] < end && x[i] >= start) {
print(c(newdata[i],end))
count <- count + 1
} else {
freq_table <- rbind(freq_table, c(start, end, count))
i <- i - 1
count <- 0
start <- end
end <- end + len
}
}
我的輸出是這樣的:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.