我有这样的数据:
ID ATTRIBUTE START END
1 A 01-01-2000 15-03-2010
1 B 05-11-2001 06-02-2002
2 B 01-02-2002 08-05-2008
2 B 01-06-2008 01-07-2008
我现在想计算每年具有特定属性的不同ID的数量。
结果可能如下所示:
YEAR count(A) count(B)
2000 1 0
2001 1 1
2002 1 2
2003 1 1
2004 1 1
2005 1 1
2006 1 1
2007 1 1
2008 1 1
2009 1 0
2010 1 0
我计算发生的第二步可能很容易。
但是我如何将数据分成几年呢?
先感谢您!
最佳答案
这是使用Hadley的一些软件包的一种方法。
library(lubridate); library(reshape2); library(plyr)
# extract years from start and end dates after converting them to date
dfr2 = transform(dfr, START = year(dmy(START)), END = year(dmy(END)))
# for every row, construct a sequence of years from start to end
dfr2 = adply(dfr2, 1, transform, YEAR = START:END)
# create pivot table of year vs. attribute with number of unique values of ID
dcast(dfr2, YEAR ~ ATTRIBUTE, function(x) length(unique(x)), value_var = 'ID')
编辑:如果原始的
data.frame
很大,那么adply
可能会花费很多时间。在这种情况下,一种有用的替代方法是使用data.table
包。这是我们可以使用adply
替换data.table
调用的方法。require(data.table)
dfr2 = data.table(dfr2)[,list(YEAR = START:END),'ID, ATTRIBUTE']
关于r - 按年份划分数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7872790/