2017-09-27 31 views
-3

我有這樣一個數據幀:Boxplox數據幀

2015 | 2016 | 2017 
-----+------+------ 
1.2 | 5.2 | 5.6 
9.1 | 3.7 | 4.3 
.../... 

,我想箱線圖列的值,每一年。

我發現的唯一方法是手動更改數據幀(從CSV文件導入)到:

Year | Value 
-----+------- 
2015 | 1.2 
... | ... 
2016 | 5.2 
... | ... 
2017 | 5.6 
... | ... 

和使用(如果CPV是我的數據幀的名稱):

ggplot(CPV, aes(x=factor(Year), y=Time)) + geom_boxplot() 

第一個問題:我可以得到的數據幀的第一種形式相同的結果?

第二個問題:我可以有相同的情節,如果我有一個「值」列,並且每年,這個值的出現次數的計數:

Value | 2015 | 2016 | ... 
------+------+------+--- 
1  | 0 | 5 | ... 
1.1 | 4 | 1 | ... 

ANSWER

  1. 使用表格的第二種形式作爲箱形圖。

  2. 要使用此表格,請使用data.table軟件包中的melt函數。

+0

請註明[重複性數據] (https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)。 – lmo

+0

第一個問題的答案是NO。你已經展示的第二種形式是數據的「融合」形式(這是正確的方式)。對於第二個問題,一旦發生事件,您可以再次融化數據並創建箱線圖。你是否也需要'value'列? –

+0

第一部分的可能的複製:使用GGPLOT2在同一幅圖繪製兩個變量如線(https://stackoverflow.com/questions/3777174/plotting-two-variables-as-lines-using-ggplot2-on-所述-同圖)。第二個問題應該是第二個問題。 – Henrik

回答

1
df <- data.frame("2015" = c(1.2, 9.2), 
      "2016" = c(5.2, 3.7), 
      "2017" = c(5.6, 4.3)) 
names(df2) <- c("Year", "Value")    # new 
# setnames(df, as.character(c(2015:2017))) # old 

reshape2會做的數據幀的轉型:

library(reshape2) 
df2 <- melt(df) 
setnames(df2, c("Year", "Value")) 
df2 

然後你就可以像之前產生箱線圖:

ggplot(df2, aes(x = factor(Year), y = Value)) + geom_boxplot() 
+0

'setnames'不是一個基本的R函數。請列出您在答案中使用的任何軟件包。 – lmo

+0

'name(df2)< - c(「Year」,「Value」)'效果很好。 – gregseth

+0

感謝您的建議!我剛剛編輯它。 –