gpt4 book ai didi

r - 计算以观察为条件的主题 ID 汇总的运行长度 == 1

转载 作者:行者123 更新时间:2023-12-02 04:52:33 24 4
gpt4 key购买 nike

我正在尝试使用 R 中的 rle 函数来计算下例中变量 positive 的运行长度,由变量 id< 聚合.

这是一个玩具数据集(不可否认有一些怪癖):

test <- c('id', 'positive')
test$id <- rep(1:3, c(24, 24, 24))
set.seed(123456)
test$positive <- round(runif(72, 0, 1))

test <- data.frame(test)
test <- subset(test, select = -X.id.)
test <- subset(test, select = -X.positive.)

result <- aggregate(positive ~ id, data = test, FUN = rle)

目前的设置方式是读取变量 positive 的所有可能值(0 和 1)的运行长度。是否可以调整此函数,使其仅在 positive == 1 时评估运行长度?

归根结底,我最终想弄清楚如何计算连续两个或更多个月为正的实例数(positive == 1) 每个主题。

更新:

我有一个名为 event 的变量,其值为 0 或 1。对于根据以下建议中的代码开发的两个或多个正例的每次出现,是否有可能对我们的结果进行分层,如果 event == 1 发生在任何积极的月份,它将被分类为不同于所有积极的 event == 0几个月?

玩具数据集如下所示:

set.seed(123456)
x <- c(1, 2, 1)
test <- data.frame(id = rep(1:3, each = 24), positive = round(runif(72, 0, 1)), event = round(runif(72, 0, 1)))

results <- aggregate(positive ~ id + event, data = test, FUN=function(x) with(rle(x), sum(lengths > 1 & values == 1)))
aggregate(positive ~ event, data = result, FUN=sum)

但是,此代码给出了事件和正数的所有可能排列,而我想将结果限定为仅计算两个或多个连续正数月份的出现次数,其中任何 event == 1 .或者,如果仅评估所有 event == 0 的连续正月数更容易,那也是一个很好的解决方案。

最佳答案

要计算两个或多个连续正数的出现次数,请使用:

aggregate(positive ~ id, data=test, FUN=function(x) with(rle(x), sum(lengths>=2 & values==1)))

(灵感来自@sgibb 的回答。)

编辑:计算 2 个或多个连续正数的数量,使得其中任何一个具有 event==1,由 id 分隔:

计算每条记录所属的run:

tmp <- within(test, run <- ave(positive, by=id, FUN=function(x)cumsum(c(1,diff(x)!=0))))

# id positive event run
# 1 1 1 1
# 1 1 0 1
# 1 0 1 2
# 1 0 0 2
# 1 0 1 2
# 1 0 0 2

对于每个 id 和每个运行标记,如果至少有一条记录具有 event==1 并且运行长度 >= 2:

tmp2 <- aggregate(event~id+positive+run, data=tmp, function(x)any(x>0) && length(x)>=2)

# id positive run event
# 2 0 1 FALSE
# 1 1 1 TRUE
# 3 1 1 FALSE
# 1 0 2 TRUE
# 3 0 2 TRUE
# 2 1 2 TRUE

现在简单地计算每个 id 和每种运行中有多少个标记运行(positive==1positive==0):

aggregate(event~positive+id, tmp2, sum)

# positive id event
# 0 1 1
# 1 1 2
# 0 2 1
# 1 2 3
# 0 3 3
# 1 3 1

关于r - 计算以观察为条件的主题 ID 汇总的运行长度 == 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18561806/

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