【发布时间】:2023-04-01 13:55:01
【问题描述】:
我有一个庞大的数据集(~150000*41) 看起来像
head(Data)
Time A1 A2 A3 ... A40
12:00:00 0 0 0.1 ... 0.65
12:00:30 0.15 0.32 0.2 ... 0.54
12:01:00 0 0.43 0.14 ... 0
.
.
.
我使用ggplot() 来绘制数据,就像这里的question 一样:
Data <- Data %>%
mutate(data=paste0('Data',data)) %>%
pivot_longer(-c(data,Time))
p <- ggplot(Data, aes(x=factor(Time),y=value,group=name,color=name))+
geom_line()+
facet_wrap(.~data,scales = 'free',ncol=1)+
xlab('Time')
众所周知,ggplot() 将在绘图之前处理数据,以便删除异常值或缺失值。让我们通过“输出数据”调用处理后的数据,这样ggplot() 将绘制输出数据而不是原始数据。在我的工作中,数据框由 150000 行组成,而在绘制数据时,ggplot() 删除了 33 行,因此输出数据由 (150000 - 33) 行组成。
我有兴趣在绘制数据后返回一个包含输出数据的新数据框。即数据框由除已删除行之外的原始数据组成。在我之前的问题中,zx8754 建议使用filter() 手动获取与输出数据相同的数据。现在,我更想知道如何直接从ggplot() 获取数据框。这个question 要求同样的事情,但答案返回一个列表而不是数据框或矩阵,使用:
Output_data<-ggplot_build(p)
我已经尝试了很多天,并且阅读了很多文档,但我找不到解决方案,尤其是我正在通过 mutate() 管道数据
编辑:jzadra 在相同的类似question 中的答案通过使用为我的问题提供了一个接近的解决方案
ggplot_build(p)$plot$data
但不返回与原始数据相同的维度。它将所有功能收集在与
相同的列中 data Time name value
<chr> <chr> <chr> <dbl>
1 Data1 12:00:00 A1 0
2 Data1 12:00:00 A2 0
3 Data1 12:00:00 A3 0.1
4 Data1 12:00:00 A4 0
5 Data1 12:00:00 A5 0
6 Data1 12:00:00 A6 0
7 Data1 12:00:00 A7 0
8 Data1 12:00:00 A8 0
9 Data1 12:00:00 A9 0
10 Data1 12:00:00 A10 0
# … with ... more rows
当我希望得到输出数据时
Time A1 A2 A3 ... A40
12:00:00 0 0 0.1 ... 0.65
12:00:30 0.15 0.32 0.2 ... 0.54
12:01:00 0 0.43 0.14 ... 0
.
.
.
【问题讨论】: