[英]R histogram from frequency table
所以我想出了如何將我的數據下鑽到頻率表 -
Overall.Cond Freq
235 1 0
236 2 0
237 3 1
238 4 1
239 5 9
240 6 1
241 7 1
242 8 1
243 9 1
我想從中繪制直方圖,但是當我執行 hist(dataFrameName) 時出現此錯誤
Error in hist.default(veenker) : 'x' must be numeric
為什么會發生這種情況,我該如何解決?
編輯:對於那些建議將barplot
作為解決方案(這不是問題)的人,請考慮這個示例,說明為什么barplot
不是一個好的解決方案。
這個樣本數據
dt = data.frame(vals = c(1.1, 1.2, 1.3, 2.0, 3.4, 26, 35, 45),
freq = c( 2, 3, 4, 3, 2, 15, 17, 14))
使用barplot(dt$freq, names.arg = dt$vals)
會產生這個非常具有誤導性的條形圖:
但是,使用以下代碼將數據轉換為矢量格式更有意義hist(as.vector(rep(dt$val, dt$freq)))
:
你真的想要直方圖還是條形圖? 如果您堅持使用直方圖,則您缺少最頂層 bin 的上限; 我假設它是10。
user2030503 提供的解決方案有點浪費,因為它從頻率表中重新創建數據集。 由於您已經計算了頻率表,因此可以直接在構建直方圖對象時使用它。 后者本質上是 R 中的一個列表。
Overall.Cond <- 1:10
Freq <- c(0,0,1,1,9,1,1,1,1)
myhist <-list(breaks=Overall.Cond, counts=Freq, density=Freq/diff(Overall.Cond),
xname="Overall Cond")
class(myhist) <- "histogram"
plot(myhist)
由於bin寬度為1,在這種情況下可以簡化密度的計算; 我只是為了一般性而提出它。
重建你的數據框:
df= as.data.frame(cbind(Overall.Cond= 1:9, Freq= c(0,0,1,1,9,1,1,1,1)))
df
結果:
Overall.Cond Freq
1 1 0
2 2 0
3 3 1
4 4 1
5 5 9
6 6 1
7 7 1
8 8 1
9 9 1
然后制作一個觀察向量並繪制它:
df.freq= as.vector(rep(df$Overall.Cond, df$Freq))
hist(df.freq)
你可以簡單地做
myfreq=table(df$columnofinterest)
plot(myfreq)
我認為它應該是一個條形圖,如下所示:
barplot(dt$Freq, names.arg = dt$Overall.Cond)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.