Ann*_*nna 2 r date subset dataframe
我用以下数据集挣扎了一段时间:
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
Run Code Online (Sandbox Code Playgroud)
我想为每个id输出具有非零变量的最后日期.这些用户的时间序列长度不同.我期望作为输出smth像:
id last_date
7031 2009-02-02
7500 2009-10-01
7041 2009-06-20
0277 2009-01-01
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激!
首先,对数据进行子集化,然后使用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")
Run Code Online (Sandbox Code Playgroud)
确保"日期"变量值由实际日期而不是字符表示.
x$date <- as.Date(x$date)
Run Code Online (Sandbox Code Playgroud)
子集:
x2 <- with(x, x[!(var1 == 0 & var2 == 0), ])
Run Code Online (Sandbox Code Playgroud)
骨料:
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
Run Code Online (Sandbox Code Playgroud)
如果您不想创建子集化数据的新对象,还可以使用: aggregate(date ~ id, x[!(x$var1 == 0 & x$var2 == 0), ], max)