gpt4 book ai didi

r - 在 R 中找到非零值和这些值的频率

转载 作者:行者123 更新时间:2023-12-01 11:46:11 25 4
gpt4 key购买 nike

我有一个数据有两个参数,它们是数据/时间和流量。流量数据为断续流。可以说有时流量为零,突然流量开始,一段时间内会有非零值,然后流量将再次为零。我想了解非零值何时出现以及每个非零流持续多长时间。我已在此位置附上示例数据集 https://www.dropbox.com/s/ef1411dq4gyg0cm/sampledataflow.csv

数据为1分钟数据。

我能够按如下方式将数据导入 R:

   flow <- read.csv("sampledataflow.csv")
summary(flow)
names(flow) <- c("Date","discharge")
flow$Date <- strptime(flow$Date, format="%m/%d/%Y %H:%M")
sapply(flow,class)
plot(flow$Date, flow$discharge,type="l")

我绘制了图表以查看分布,但不知道从哪里开始获取每个非零值的频率。我希望看到如下输出表:

Date    Duration in Minutes

如果我在这里不清楚,请告诉我。谢谢。

附加信息:

我认为我们需要先检查非零值,然后在再次达到零值之前找出连续有多少个非零值。我想了解的是流释放持续时间。例如。一天之内可能会有多个版本,我想记下版本是什么时候开始的,以及它持续了多长时间才达到零值。我希望这能更好地解释问题。

最佳答案

第一点是你的数据中有太多的NA。如果您想调查一下。如果我理解正确,您需要计算每个日期的连续 0 后跟连续非零、零、非零等。

这当然可以用rle来实现,@mnel在评论下也提到了。但也有不少问题。

首先,我将使用非 NA 条目设置数据:

flow <- read.csv("~/Downloads/sampledataflow.csv")
names(flow) <- c("Date","discharge")
flow <- flow[1:33119, ] # remove NA entries

# format Date to POSIXct to play nice with data.table
flow$Date <- as.POSIXct(flow$Date, format="%m/%d/%Y %H:%M")

接下来,我将创建一个 Date 列:

flow$g1 <- as.Date(flow$Date)

最后,我更喜欢使用 data.table。所以这里有一个使用它的解决方案。

# load package, get data as data.table and set key
require(data.table)
flow.dt <- data.table(flow)
# set key to both "Date" and "g1" (even though, just we'll use just g1)
# to make sure that the order of rows are not changed (during sort)
setkey(flow.dt, "Date", "g1")
# group by g1 and set data to TRUE/FALSE by equating to 0 and get rle lengths
out <- flow.dt[, list(duration = rle(discharge == 0)$lengths,
val = rle(discharge == 0)$values + 1), by=g1][val == 2, val := 0]

> out # just to show a few first and last entries

# g1 duration val
# 1: 2010-05-31 120 0
# 2: 2010-06-01 722 0
# 3: 2010-06-01 138 1
# 4: 2010-06-01 32 0
# 5: 2010-06-01 79 1
# ---
# 98: 2010-06-22 291 1
# 99: 2010-06-22 423 0
# 100: 2010-06-23 664 0
# 101: 2010-06-23 278 1
# 102: 2010-06-23 379 0

因此,例如,对于 2010-06-01,有 722 个0,然后是 138 个非零,然后是 32 0 后跟 79 个 非零 等等...

关于r - 在 R 中找到非零值和这些值的频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14991476/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com