2013-07-19 126 views
8

我有一個2列的矩陣。我想boxplot每個這些列,但每個具有不同數量的條目。不同長度的向量盒圖

例如,第一列有10個條目,第二列有7個條目。第二列的剩餘3個被賦予零。

我想繪製這些並排比較的原因。

有沒有辦法告訴R boxplot整個列1,只有列2的前7條目?

回答

11

你可以簡單地索引你要我帶你,你有一個矩陣的值,例如

## dummy version of your data 
mat <- matrix(c(1:17, rep(0, 3)), ncol = 2) 

## create object suitable for plotting with boxplot 
## I.e. convert to melted or long format 
df <- data.frame(values = mat[1:17], 
       vars = rep(c("Col1","Col2"), times = c(10,7))) 

## draw the boxplot 
boxplot(values ~ vars, data = df) 

在上面你的話。如果你確實有一個數據幀,那麼你就需要

df <- data.frame(values = c(mat[,1], mat[1:7, 2]), 
       vars = rep(c("Col1","Col2"), times = c(10,7))) 

,我以爲,在兩列中的數據是這樣的事實相媲美的值是兩列顯示分類變量,使我們分裂值(如男性和女性的身高,性別作爲分類值)。

產生的箱線圖如下所示

enter image description here

+0

非常感謝。爲了確保我能夠正確地做到這一點,您可以將所有內容從「墊子」讀取爲「值」作爲矢量。然後用兩列創建'變量'變量,'時間'告訴'變量'前10個屬於col1,下一個7屬於col2?我說得對嗎? – user1007742

+0

不完全;我只讀了'mat'的前17個值,但你有權休息。 –

+0

我該如何做到3向量而不是2? – user1007742

2

對於任何數量的列和任意數量,你可以做這樣的空項。

## Load data from CSV; first row contains column headers 
dat <- read.csv('your-filename.csv', header = T) 

## Set plot region (when set 'ylim' skip first row with headers) 
plot(
    1, 1, 
    xlim=c(1,ncol(dat)), ylim=range(dat[-1,], na.rm=T), 
    xaxt='n', xlab='', ylab='' 
) 
axis(1, labels=colnames(dat), at=1:ncol(dat)) 

for(i in 1:ncol(dat)) { 
    ## Get i-th column 
    p <- dat[,i] 

    ## Remove 0 values from column 
    p <- p[! p %in% 0] 
    ## Instead of 0 you can use any values 
    ## For example, you can remove 1, 2, 3 
    ## p <- p[! p %in% c(1,2,3)] 

    ## Draw boxplot 
    boxplot(p, add=T, at=i) 
} 

此代碼加載表形式的CSV文件,從列中刪除0值(或者你可以刪除任何其他值),並繪製所有箱圖,每列一個圖形。

認爲這有助於。