如何在R中的分组数据中找到某个观测值的最后一次出现? [英] How to find the last occurrence of a certain observation in grouped data in R?

查看:165
本文介绍了如何在R中的分组数据中找到某个观测值的最后一次出现?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有在R中使用dplyr分组的数据.我想找到每组('A'中等于或大于1(1、2、3或4)的观测值('B')的最后一次出现'),就发生的日期而言.我希望每个组的天"值在新列中给出.

I have data that is grouped using dplyr in R. I would like to find the last occurrence of observations ('B') equal to or greater than 1 (1, 2, 3 or 4) in each group ('A'), in terms of the 'day' they occurred. I would like the value of 'day' for each group to be given in a new column.

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

For example, given the following sample of data, grouped by A (this has been simplified, my data is actually grouped by 3 variables):

A  B  day
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  day last
a  2  1   5
a  2  2   5
a  1  5   5
a  0  8   5
b  3  1   6
b  3  4   6
b  3  6   6
b  0  7   6
b  0  9   6
c  1  2   4
c  1  3   4
c  1  4   4

我希望这是有道理的,非常感谢大家的帮助!我已经在网上彻底搜索了我的答案,但找不到任何东西.但是,如果我不小心重复了一个问题,则表示歉意.

I hope this makes sense, thank you all very much for your help! I have thoroughly searched for my answer online but couldn't find anything. However, if I have accidentally duplicated a question then I apologise.

推荐答案

我们可以尝试

library(data.table)
setDT(df1)[, last := day[tail(which(B>=1),1)] , A]
df1
#    A B day last
# 1: a 2   1    5
# 2: a 2   2    5
# 3: a 1   5    5
# 4: a 0   8    5
# 5: b 3   1    6
# 6: b 3   4    6
# 7: b 3   6    6
# 8: b 0   7    6
# 9: b 0   9    6
#10: c 1   2    4
#11: c 1   3    4
#12: c 1   4    4


或使用dplyr

library(dplyr)
df1 %>%
   group_by(A) %>%
   mutate(last = day[max(which(B>=1))])

或使用dplyr中的last功能(如@docendo discimus建议)

Or use the last function from dplyr (as @docendo discimus suggested)

df1 %>%
   group_by(A) %>%
   mutate(last= last(day[B>=1]))


对于第二个问题,


For the second question,

setDT(df1)[, dayafter:= if(all(!!B)) NA_integer_  else 
             day[max(which(B!=0))+1L] , A]
#    A B day dayafter
# 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

这篇关于如何在R中的分组数据中找到某个观测值的最后一次出现?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆