2013-07-18 3 views
4

많은 바이올린 (기둥)이있는 바이올린 음모를 그릴 방법을 찾고 있습니다. 문제는 내 열의 길이가 다양하다는 것입니다. 예를 들어 다음과 같습니다.R - 변화하는 기둥이있는 바이올린 음모

"V1" "V2" 
"V1" 9 255.5 
"V2" 432 286 
"V3" 161 322.5 
"V4" 320.5 277 
"V5" 253.5 153.5 
"V6" 301 155.5 
"V7" 113 218.5 
"V8" 341 394 
"V9" 138 93.5 
........ 
"V38166" 62 152 
"V38167" NA 20.5 
"V38168" NA 12 
"V38169" NA 40.5 
"V38170" NA 88 
"V38171" NA 2.5 
"V38172" NA 279.5 
"V38173" NA 161.5 
"V38174" NA 14.5 

위에서 볼 수 있듯이 첫 번째 열에는 더 적은 수의 항목이 있으므로 일부 항목이 있습니다. 더 많은 열이있을 수 있음을 명심하십시오. 문제는 어떤 칼럼에 NA가있는 바이올린 음모를 만들 수 있습니까?

나는 이것을 시도했다 :

jpeg("violinplot.jpg", width = 1000, height = 1000); 
do.call(vioplot,c(statsDataFrame, list(names=nameList))) 
dev.off() 

statsDataFrame을 내가 위에서 게시 한 전체 데이터 프레임 인.

Error in quantile.default(data, 0.25) : 
    missing values and NaN's not allowed if 'na.rm' is FALSE 
Calls: do.call -> <Anonymous> -> quantile -> quantile.default 
Execution halted 

기본적으로 NA의에 대해 불평 : 나는 스크립트를 실행하면, 그러나, 나는 다음과 같은 오류가 발생합니다. 그래서 같은 TRUE = 모두 na.rm = FALSE와 na.rm 시도했다 :

jpeg("stats/AllDistanceViolinPlot.jpg", width = 1000, height = 1000); 
do.call(vioplot,c(columnViolinDistanceDataUnlist,na.rm=FALSE,list(names=tfListRow))) 
dev.off() 

jpeg("stats/AllDistanceViolinPlot.jpg", width = 1000, height = 1000); 
do.call(vioplot,c(columnViolinDistanceDataUnlist,na.rm=TRUE,list(names=tfListRow))) 
dev.off() 

하지만 아무 소용이

.

누구에게이 작업을 수행 할 수있는 방법이나 제안 사항이 있습니까?

도움 주셔서 감사합니다.

+0

나는 대개 바이올린 플롯에 대한 ggplot를 사용합니다. http://docs.ggplot2.org/current/geom_violin.html –

+0

ggplot은 다른 열 길이로 작동합니까? – intl

답변

5

data.frame (길이가 같지 않은 열)을 컨테이너 데이터 구조로 사용하지 못하게하는 NA를 제거해야하지만 목록을 취하는 do.call도 사용해야합니다. 그러므로 나는 각자가 목록 요소로 반환되기 때문에 NA의있는 data.frame의 각 열에서 값을 제거하는 lapply을 사용하고 당신은 여전히 ​​do.call를 사용 (데이터가 df라고 가정) 할 수 있습니다

do.call(vioplot, lapply(df, function(x) x[!is.na(x)])) 

또는 @BrianDiggs 같은 점 밖으로, 당신은 꽤 훨씬 더 간결하고 사용할 수 :

do.call(vioplot, lapply(df, na.omit)) 
+1

또는 익명의 함수를'na.omit'으로 바꿀 수 있습니다 :'do.call (vioplot, lapply (df, na.omit))' –

+0

@BrianDiggs 아, 고마워. 나는 * 항상 * 편리한 "na.omit"을 잊어 버리고 곧바로 비교/부분 집합으로 간다! –

+0

감사합니다. 간단한 솔루션. – intl