gpt4 book ai didi

r - 如何在 R 中找到某个观察结果最后一次出现后的日期?

转载 作者:行者123 更新时间:2023-12-01 09:28:32 24 4
gpt4 key购买 nike

我在 R 中使用 dplyr 对数据进行了分组。我想在每组中最后一次出现的观察结果 ('B') 之后找到等于或大于 1(1、2、3 或 4)的“日期” ('A')。换句话说,1/2/3/4 变成 0 的‘日期’。

简单地查找第一次出现 0 的日期将不起作用,因为在某些组中 1/2/3/4 切换到 0 然后再返回并且不会给出我想要的结果。

我希望在新列(“date.after”)中给出每个组的这个“日期”。

例如,给定以下数据样本,按 A 分组(这已经简化,我的数据实际上按 3 个变量分组):

A  B  date
a 2 1
a 2 2
a 1 5
a 0 8
b 3 1
b 3 4
b 3 6
b 0 7
b 0 9
c 1 2
c 1 3
c 1 4

我想实现以下目标:

A  B  date date.after
a 2 1 8
a 2 2 8
a 1 5 8
a 0 8 8
b 3 1 7
b 3 4 7
b 3 6 7
b 0 7 7
b 0 9 7
c 1 2 NA
c 1 3 NA
c 1 4 NA

我希望这是有道理的,非常感谢大家的帮助!这篇文章可能看起来很眼熟,我刚刚问了一个非常相似的问题:

How to find the last occurrence of a certain observation in grouped data in R?

最佳答案

这是一个 dplyr 选项:

df %>% group_by(A) %>% mutate(date_after = date[last(which(B >= 1)) + 1])
#Source: local data frame [12 x 4]
#Groups: A [3]
#
# A B date date_after
# (fctr) (int) (int) (int)
#1 a 2 1 8
#2 a 2 2 8
#3 a 1 5 8
#4 a 0 8 8
#5 b 3 1 7
#6 b 3 4 7
#7 b 3 6 7
#8 b 0 7 7
#9 b 0 9 7
#10 c 1 2 NA
#11 c 1 3 NA
#12 c 1 4 NA

或者,您可以使用 dplyr 的 nth功能:

df %>% group_by(A) %>% mutate(date_after = nth(date, last(which(B >= 1)) + 1))

它的作用(在两种情况下):它计算 B 的最后一个条目的位置。等于或大于 1,然后将该索引加 1 并返回 date的那个位置。它返回 NA如果该位置不可用(如最后一组的情况)。

您可以使用以下方法在 data.table 中执行完全相同的操作:

library(data.table)
setDT(df)[, date_after := date[last(which(B >= 1)) + 1], by = A]

关于r - 如何在 R 中找到某个观察结果最后一次出现后的日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35655196/

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