【问题标题】:Arrange dataframe format for ggplot - R安排ggplot的数据框格式 - R
【发布时间】:2017-11-08 12:00:56
【问题描述】:

我想将我的数据从宽格式改成长格式,以便我可以使用 ggplot 创建图表。我在正确排列数据时遇到了一些问题。到目前为止,我从 27 个数据帧的列表开始我的过程(仅向您展示前 10 个):

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

我正在使用data.table package 中的rbindlist 将所有内容合并为一个dataframe

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

代码可以正常工作,但我没有创建我真正需要的结构。输出是 dataframe,包含 270 个(27 个 daframes * 每个 10 行)观察和 54 个变量(27 个数据帧 * 每个 2 列)

image of newdf

正如您在图片newdf 中看到的那样,它创建了 270 行,但我想要获得的是 10 行(因此避免使用 NA 值)

有什么帮助吗?

这个问题和这个类似 Plot dataframe with ggplot2 - R

不同之处在于我改变了生成输入的方式并且知道我不知道如何正确安排数据框以供以后使用

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

然后使用 ggplot 创建我的图表

有什么帮助吗?

【问题讨论】:

    标签: r dataframe ggplot2 data.table


    【解决方案1】:

    我想您是在问如何对矩阵进行列绑定。据我所知,data.table 没有 cbindlist 函数,因此您可以尝试:do.call("cbind", NDVI_stat) 尽管这并不完全相同,并且如果每个行中的行数不相等,则会失败数据框。

    【讨论】:

      【解决方案2】:

      问题是列表的每个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
      

      【讨论】:

      • 您好,感谢您的回复。 bind_rows不是在dplyr包里吗?
      • 是的,但是 dplyr 是 tidyverse 的一部分,因此您可以完全加载 tidyverse 以访问 dplyr 中的 bind_rows 和 tidyr 中的 map
      • 感谢您的详细解答
      猜你喜欢
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 2019-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多