簡體   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