我有这样的数据:

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/

10-09 16:26
查看更多