2013-07-19 2 views
8

2 행의 행렬이 있습니다. boxplot에 각 열을 넣고 싶지만 각각 다른 수의 항목이 있습니다.다른 길이의 벡터 박스 플롯

예를 들어 첫 번째 열에는 10 개의 항목이 있고 두 번째 열에는 7 개의 항목이 있습니다. 두 번째 열의 나머지 3 개는 0으로 지정됩니다.

비교를 위해이 두 가지를 나란히 표시하고 싶습니다.

R이 boxplot에 전체 열 1을, 첫 번째 항목에 열 2 만 알려주는 방법이 있습니까?

답변

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))) 

을 필요 나는 두 컬럼의 데이터 값이 2 열로 있다는 사실한다는 점에서 비교할 수 있다고 가정하는 것은 우리가 분할 할 수있는 범주 형 변수를 제안한다 값 (남성과 여성의 키와 같은 성별, 범주 적 가치).

결과 상자 그림은 컬럼의 수와 같이 할 수있는 비어있는 항목의 수를 들어

enter image description here

+0

감사합니다. 내가 올바르게 이해할 수 있도록, '매트'에서 '값'으로 모든 것을 벡터로 읽습니다. 그런 다음 'vars'변수를 두 개의 열로 만들고 'times'는 'vars'에 처음 10이 col1에 속하고 다음 7은 col2에 속한다는 것을 알려줍니다. 나는 그것을 올바르게 받았 느냐? – user1007742

+0

아닙니다. 나는 단지'mat'에서 처음 17 개의 값을 읽었지 만, 여러분은 올바른 휴식을 취하고 있습니다. –

+0

어떻게 이것을 2 대신 3 개의 벡터로 할 수 있습니까? – 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 값을 제거 (또는 어떤 다른 값을 제거 할 수 있습니다), 한 그래픽의 모든 컬럼에 대한 모든 상자 그림을 그립니다.

이렇게 생각하십시오.