Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在R中提取data.frame中子序列的最后日期?_R_Date_Dataframe_Subset - Fatal编程技术网

如何在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