簡體   English   中英

來自頻率表的 R 直方圖

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM