作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 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/
我是一名优秀的程序员,十分优秀!