如何在R中提取data.frame中子序列的最后日期?
我为以下数据集挣扎了一段时间:如何在R中提取data.frame中子序列的最后日期?,r,date,dataframe,subset,R,Date,Dataframe,Subset,我为以下数据集挣扎了一段时间: id date var1 var2 1 7031 2008-12-01 27 1 2 7031 2009-01-05 6 0 3 7031 2009-02-02 0 3 4 7031 2008-11-01 1 4 5 7500 2009-07-11 30 0 6 7500 2009-10-01 8 0 7 7500 2010-01-01 0 0 8 7041 2
id date var1 var2
1 7031 2008-12-01 27 1
2 7031 2009-01-05 6 0
3 7031 2009-02-02 0 3
4 7031 2008-11-01 1 4
5 7500 2009-07-11 30 0
6 7500 2009-10-01 8 0
7 7500 2010-01-01 0 0
8 7041 2009-06-20 26 0
9 7041 2009-08-01 0 0
10 0277 2009-01-01 3 0
我想为每个id输出带有非零变量的最后一个日期。这些用户的时间序列长度不同。我希望输出smth如下:
id last_date
7031 2009-02-02
7500 2009-10-01
7041 2009-06-20
0277 2009-01-01
任何帮助都将不胜感激 首先,将数据子集,然后使用
aggregate()
:
以下是您的示例数据:
x <- read.table(header = TRUE, stringsAsFactors=FALSE, text = "
id date var1 var2
1 '7031' 2008-12-01 27 1
2 '7031' 2009-01-05 6 0
3 '7031' 2009-02-02 0 3
4 '7031' 2008-11-01 1 4
5 '7500' 2009-07-11 30 0
6 '7500' 2009-10-01 8 0
7 '7500' 2010-01-01 0 0
8 '7041' 2009-06-20 26 0
9 '7041' 2009-08-01 0 0
10 '0277' 2009-01-01 3 0")
如果你不想为你的子集数据创建一个新的对象,你也可以使用:
aggregate(date~id,x[!(x$var1==0&x$var2==0),],max)
的可能副本你能澄清一下你的意思是“var1”和“var2”都等于零,还是“var1”和“var2”都等于零。@thelatemail,我想说,你的链接问题几乎是重复的,而不是重复的。这个问题更多地涉及到它自身的最大日期(他们想要每年的最后一个日期),而这是与一个单独的分组变量相关的最大日期。在概念上相似,但将这两个问题都放在这里可能很有用。@AnandaMahto-很公平,我会说这是概念的完全重复,但我很高兴。@AnandaMahto我在这里的意思是,如果两个变量都等于零,这一行应该被忽略。备选方案:x2@MvG,好主意,但是我已经不再习惯使用subset()
。但是您的想法可以与[
子集一起很好地工作。谢谢。
x$date <- as.Date(x$date)
x2 <- with(x, x[!(var1 == 0 & var2 == 0), ])
aggregate(date ~ id, x2, max)
# id date
# 1 277 2009-01-01
# 2 7031 2009-02-02
# 3 7041 2009-06-20
# 4 7500 2009-10-01