2017-11-08 8 views
0

ggplot을 사용하여 그래프를 만들 수 있도록 데이터를 넓은 형식에서 긴 형식으로 재구성하려고합니다. 데이터를 적절하게 작성하는 데 문제가 있습니다. 지금까지 나는 (당신에게 처음 10 사람을 보여주는) 27 dataframes의 목록을 내 프로세스를 시작 :ggplot-R의 데이터 프레임 형식 배열

> str(NDVI_stat) 
List of 27 
$ :'data.frame': 10 obs. of 2 variables: 
    ..$ NDVI 1 mean: num [1:10] 0.1796 0.3105 0.1422 0.0937 0.1711 ... 
    ..$ NDVI 1 sd : num [1:10] 0.1117 0.05845 0.00743 0.02754 0.01506 ... 
$ :'data.frame': 10 obs. of 2 variables: 
    ..$ NDVI 2 mean: num [1:10] 0.0819 0.5954 0.1328 0.0953 0.1492 ... 
    ..$ NDVI 2 sd : num [1:10] 0.00872 0.10508 0.00863 0.01878 0.02303 ... 
$ :'data.frame': 10 obs. of 2 variables: 
    ..$ NDVI 3 mean: num [1:10] 0.0634 0.681 0.2108 0.0151 0.179 ... 
    ..$ NDVI 3 sd : num [1:10] 0.0344 0.076 0.0361 0.0638 0.0428 ... 
$ :'data.frame': 10 obs. of 2 variables: 
    ..$ NDVI 4 mean: num [1:10] 0.0971 0.6885 0.2326 0.1157 0.3219 ... 
    ..$ NDVI 4 sd : num [1:10] 0.00991 0.07509 0.02054 0.02793 0.0303 ... 
$ :'data.frame': 10 obs. of 2 variables: 
    ..$ NDVI 5 mean: num [1:10] 0.0817 0.4825 0.2754 0.1003 0.4155 ... 
    ..$ NDVI 5 sd : num [1:10] 0.00998 0.05034 0.02781 0.03248 0.04056 ... 
$ :'data.frame': 10 obs. of 2 variables: 
    ..$ NDVI 6 mean: num [1:10] 0.1119 0.7667 0.582 0.0997 0.4426 ... 
    ..$ NDVI 6 sd : num [1:10] 0.023 0.0672 0.0649 0.0331 0.0557 ... 
$ :'data.frame': 10 obs. of 2 variables: 
    ..$ NDVI 7 mean: num [1:10] 0.1997 0.6567 0.5111 0.0988 0.3307 ... 
    ..$ NDVI 7 sd : num [1:10] 0.0671 0.0756 0.0435 0.0288 0.0457 ... 
$ :'data.frame': 10 obs. of 2 variables: 
    ..$ NDVI 8 mean: num [1:10] 0.3626 0.7356 0.6304 0.0954 0.335 ... 
    ..$ NDVI 8 sd : num [1:10] 0.1454 0.0888 0.0502 0.0298 0.038 ... 
$ :'data.frame': 10 obs. of 2 variables: 
    ..$ NDVI 9 mean: num [1:10] 0.541 0.748 0.637 0.089 0.577 ... 
    ..$ NDVI 9 sd : num [1:10] 0.0968 0.0721 0.0396 0.0276 0.0656 ... 
$ :'data.frame': 10 obs. of 2 variables: 
    ..$ NDVI 10 mean: num [1:10] 0.6691 0.4377 0.6713 0.0942 0.6827 ... 
    ..$ NDVI 10 sd : num [1:10] 0.088 0.0698 0.033 0.0316 0.0688 ... 
$ :'data.frame': 10 obs. of 2 variables: 

을 나는 하나의 dataframe

newdf<-rbindlist(NDVI_stat, use.names = TRUE, fill = TRUE)

에 모든 병합 할 data.table package에서 rbindlist을 사용하고 있습니다

코드가 제대로 작동하지만 실제로 필요한 구조를 만들지 않습니다. 출력 (270)와 dataframe이다 (27 daframes * 각각 10 행)가 화상에서 볼 수 있듯이

image of newdf

(각 27 dataframes * 2 열)의 관찰, 54 개 변수 newdf 그것이 270 행을 만들지 만 얻고 자하는 것은 10 행입니다 (따라서 NA 값은 피하십시오).

어떤 도움이 필요합니까?

이 질문은 차이가 나는 내 입력을 생산하고 내가 제대로 나중에 사용하기 위해 dataframe를 정렬하는 방법을 잘 모릅니다 알고있는 방식을 변경한다는 것입니다이 하나 Plot dataframe with ggplot2 - R

유사하다

NDVIdf_forplot <- gather(NDVIdf, key = statistic, value = value, -ID)

그리고 나서 ggplot을 사용하여 그래프를 만듭니다.

어떤 도움이 필요합니까?

답변

0

저는 여러분이 행렬을 열 바인딩하는 방법을 묻고 있다고 생각합니다. 내가 아는 한 data.table에는 cbindlist 함수가 없으므로 다음과 같이 시도 할 수 있습니다. do.call("cbind", NDVI_stat) 그래도 같지는 않지만 각 데이터 프레임에 같은 수의 행이 없으면 실패합니다.

+0

다시 한번 감사 드리며 문제가 해결되었습니다 – GCGM

0

문제는 변수 이름이 목록의 각 df가 다르다는 것입니다. 그게 해결되면 나머지는 당신이 상상하는대로입니다.

dplyr/tidyr와 예 :

df1<-data.frame(mean1=c(2,3), 
       sd1 = c(1,2)) 

df2<-data.frame(mean2=c(4,5), 
       sd2 = c(3,4)) 

listdf<-list(df1,df2) 
str(listdf) 

List of 2 

$ :'data.frame': 2 obs. of 2 variables: 

    ..$ mean1: num [1:2] 2 3 

    ..$ sd1 : num [1:2] 1 2 

$ :'data.frame': 2 obs. of 2 variables: 

    ..$ mean2: num [1:2] 4 5 

    ..$ sd2 : num [1:2] 3 4 

모든 데이터 프레임을 바꾸고 바인드 함께 행씩 준다

library(tidyverse) 


listdf%>%map(function(x){x%>%rename_(mean = names(x)[1], 
            sd = names(x)[2])})%>% 
    bind_rows() 

mean sd 

    2 1 

    3 2 

    4 3 

    5 4 
준다
+0

안녕하세요, 귀하의 회신에 감사드립니다. 'dplyr' 패키지의'bind_rows'에 없습니까? – GCGM

+0

예, dplyr은 tidyverse의 일부이므로 dplyr의 bind_rows에 액세스 할 수 있도록 tidyverse를 완전히로드하고 tidyr에서 매핑 – Dries

+0

자세한 답변을 보내 주셔서 감사합니다 – GCGM