2014-11-24 4 views
0

저는 Swirl과 RStudio를 사용하여 R을 학습하는 중입니다. 내가 설정 한 목표는 this graph을 다시 만드는 것입니다. 아래에 링크 할 작은 데이터 세트가 있습니다 (제목이 활성화 된 일반 텍스트 CSV 파일로 저장 됨).R : 발아 여물 시간의 선 그래프 문제

아무 것도 변경하지 않고 해당 데이터 세트를 플롯하려고하면 분명히 목표가 아닌 this이됩니다.

처음에는 kt로 정의 된 가져온 데이터 세트의 클래스에 문제가 있다고 생각했습니다. 클래스 (kt)가 data.frame으로 밝혀진 후에 나는 그것이 문제가 아니라고 생각했습니다. R이 즉시 그릴 수있는 테이블로 다시 작성해야합니까, 아니면 각 종을 개별적으로 추출하여 개별적으로 그려보고 다른 여러 그래프를 하나의 그래프로 결합해야합니까? 아마도 내 일정에 잘못된 것이 있습니다. R이 특정 방식으로 날짜를 처리한다는 것을 알고 있습니다. 어쩌면 이러한 솔루션은 필요하지 않습니다. 그리고 저는 그냥 바보 같은 실수를 저 지르지 만 직접 찾을 수는 없습니다.

귀하의 도움에 감사드립니다.

데이터 집합이 같은

Species,week 0,week 1,week 2,week 3,week 4,week 5,week 6,week 7,week 8,week 9,week 10,week 11,week 12,week 13,week 14,week 15,week 16,week 17,week 18 
Caesalpinia coriaria,0.0%,24.0%,28.0%,28.0%,32.0%,37.0%,40.0%,46.0%,52.0%,56.0%,63.0%,64.0%,68.0%,71.0%,72.0%,,,, 
Coccoloba swartzii,0.0%,0.0%,1.0%,10.0%,19.0%,31.0%,33.0%,39.0%,43.0%,48.0%,52.0%,52.0%,52.0%,52.0%,52.0%,52.0%,52.0%,55.0%, 
Cordia dentata,0.0%,5.0%,18.0%,21.0%,24.0%,26.0%,27.0%,30.0%,32.0%,32.0%,32.0%,32.0%,32.0%,32.0%,33.0%,33.0%,33.0%,34.0%,35.0% 
Guaiacum officinale,0.0%,0.0%,0.0%,0.0%,4.0%,5.0%,5.0%,5.0%,7.0%,8.0%,8.0%,8.0%,8.0%,8.0%,8.0%,8.0%,8.0%,, 
Randia aculeata,0.0%,0.0%,0.0%,4.0%,13.0%,14.0%,18.0%,19.0%,21.0%,21.0%,21.0%,21.0%,21.0%,22.0%,22.0%,22.0%,22.0%,, 
Schoepfia schreberi,0.0%,0.0%,0.0%,0.0%,0.0%,0.0%,1.0%,4.0%,8.0%,11.0%,13.0%,21.0%,21.0%,24.0%,24.0%,25.0%,27.0%,, 
Prosopis juliflora,0.0%,7.5%,31.3%,34.2%,,,,,,,,,,,,,,, 

답변

1

뭔가?

# get rid of "%" signs 
df <- data.frame(sapply(df,function(x)gsub("%","",x,fixed=T))) 
# convert cols 2:20 to numeric 
df[,2:20] <- sapply(df[,2:20],function(x)as.numeric(as.character(x))) 

library(reshape2) 
library(ggplot2) 
gg <- melt(df,id="Species") 
ggplot(gg,aes(x=variable,y=value,color=Species,group=Species)) + 
    geom_line()+ 
    theme_bw()+ 
    theme(legend.position="bottom", legend.title=element_blank()) 

여기에 많은 문제점이있다.

첫 번째로 데이터 세트에 실제로 % 기호가있는 경우 R은 데이터를 문자로 해석하고이를 요인으로 가져옵니다. 그래서 먼저 %을 없애야합니다 (숫자는 gsub(...)이고 나머지 숫자는 숫자로 변환해야합니다.) 요인으로는 먼저 문자로 변환 한 후 숫자로 변환해야합니다 : as.numeric(as.character(...)).이 모든 문제를 피할 수있었습니다. 당신이!

다른 색상으로 여러 곡선을 세우고 % 표시하지 않고 데이터를 을 수출하는 경우는 (다른 많은 것들 사이)에 ggplot 패키지를 위해 설계되었습니다 무언가이다, 그래서 우리는 그것을 사용합니다. ggplot 긴 "데이터를 선호 "format - 하나의 열에있는 모든 데이터와 다른 데이터 세트를 구분하는 두 번째 열 데이터는"와이드 "형식 - 서로 다른 열의 데이터입니다. 따라서 에서 melt(...)을 사용하여 long으로 변환합니다. 패키지. 그 결과 gg에는 Species, variablevalue의 세 열이 있습니다. value에는 실제 데이터가 들어 있고 variable에는 주 번호가 들어 있습니다.

그래서 이제 Species 매핑 색상의 variable 열은 value 열로 Y 축, X 축 설정하는 ggplot 객체를 생성하고, 우리는 (geom_line(...) 사용) 라인 플롯 ggplot 말한다.

나머지는 범례를 아래쪽에 배치하고 ggplot 기본 서식 중 일부를 해제하는 것입니다.

+0

감사합니다. 원래 데이터 세트에서 % 기호를 제거하고 다시 내보냈습니다. 왜냐하면 처음 작업을 수행 할 수 없었기 때문입니다. 당신이 그랬던 것처럼 그래프를 볼 수있게되었지만 R로 % 기호를 제거하면 문제가 발생했습니다. – Yoeri

+0

변수 df에 "Species"열이 없기 때문에 gg <- melt (df, id = "Species")로 만든 gg 변수를 작성할 수 없습니다. data.frame (sapply) 명령을 사용하면 6 개의 변수가있는 2 개의 관측 데이터 프레임이 생기므로 [2:20]을 선택하면 [2 : 6]이되고 모든 것이 아래쪽으로갑니다. – Yoeri