2017-11-08 4 views
0

私はggplotを使ってグラフを作成できるように、データをワイドフォーマットからロングフォーマットに変えたいと思っています。私はデータを適切に作成するためにいくつかの問題を抱えています。これまでのところ私は27個のデータフレーム(ちょうどあなたの最初の10個のものを示す)のリストに私のプロセスを開始します。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を使用しています

コードは正常に動作しますが、実際に必要な構造は作成されていません。あなたはそれが画像newdfに見ることができるように、出力270とdataframe(27 daframes *各10行)観察および54個の変数(27個のデータフレームそれぞれにおいて* 2列)

image of newdf

あります270行を作成するが、私が得たいものは10行です(したがって、NA値は避けてください)

何か助けてください。

この質問は、違いは、私は私の入力を生成し、私は適切に後で使用するためにデータフレームを配置する方法を知らない知っている方法を変更したことで、この1 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の一部ですので、tiddyrからbind_rowsにアクセスしてtidyrからマップすることができます。 – Dries

+0

詳細な回答をありがとう – GCGM

関連する問題