繁体   English   中英

如何提取数据框中的最小值/最大值以将数据显示为功能区?

[英]How to extract the min/max values in a dataframe to display data as a ribbon?

我在数据框中存储了几组数据。 为了解决这个问题,我在下面提供了一种生成此数据帧的方法,但是IRL,我只有merged数据帧,而没有中间的数据帧。

x <- seq.POSIXt(from = strptime("1970-01-01 00:00:00", format = "%Y-%m-%d %H:%M:%S"),
                to = strptime("1970-01-01 00:05:00", format = "%Y-%m-%d %H:%M:%S"),
                by = "10 sec")

x <- rep(x, each = 3)
y <- c()

set.seed(1)

for (i in 1:length(x)) {
  y <- c(y, runif(1, min = 0, max = i))
}

my.data.frame1 <- data.frame(x, y, data = as.factor("data1"))

y <- c()
for (i in 1:length(x)) {
  y <- c(y, runif(1, min = length(x) - i, max = length(x)))
}

my.data.frame2  <- data.frame(x, y, data = as.factor("data2"))

merged <- rbind(my.data.frame1, my.data.frame2)

ggplot(merged, aes(x, y, color = data)) + geom_point() + geom_line()

因此,对于每种类型的数据(data1和data2)以及x轴上的每个日期值,我都有3个y值。

情节看起来(不好)是这样的:

在此处输入图片说明

我想做的是绘制数据的geom_ribbon ,但我不知道该怎么做。

我首先尝试每次使用此处说明的aggregate函数提取最小值和最大值,并构建一个没有重复x值但无法正常工作的新数据框。

有人可以帮忙吗?

编辑:

我尝试使用aggregate的代码是以下代码:

aggregate(y ~ x, data = merged, max)

(相同的分钟)。 但这并没有使data1集和data2集区别。 我知道可以子集化,但是我猜可以使用“ by”参数来完成。 只是无法使其工作。

您处在正确的轨道上,需要按datax进行汇总,而不仅仅是x

您可以在两个aggregate调用中分别按组计算minmax ,然后合并或同时进行。 对于第二种方法,您将需要一个额外的步骤来将两个函数的输出放入单独的列中。

my.new.df = aggregate(y ~ data + x, data = merged, FUN = function(x) c(min = min(x), max = max(x)))

# Get the min and max as separate columns
my.new.df = as.data.frame(as.list(my.new.df))

ggplot(my.new.df, aes(x, fill = data)) + 
    geom_ribbon(aes(ymin = y.min, ymax = y.max), alpha = 0.6)

您也可以直接在geom_ribbon使用stat = "summary"进行geom_ribbon而不必为绘图进行汇总。

ggplot(merged, aes(x, y, fill = data)) + 
    geom_ribbon(alpha = 0.6, stat = "summary", fun.ymax = max, fun.ymin = min)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM