我在不同地点有数年的数据。我希望按地点按年计算:
library(data.table)
t1 <- data.table(ID = 1:100, Year = 2010:2015, Loc = LETTERS[1:7])
t1 <- t1[, .N, by=.(Year, Loc)]
# Year Type N
# 1: 2010 A 3
# 2: 2011 B 3
# 3: 2012 C 3
# ...
但是,我想要的是一个data.table解决方案,类似于下面的使用dplyr:
library(dplyr)
spread(t1, Loc, N)
# Year A B C D E F G
# 1: 2010 3 2 2 2 2 3 3
# ...
如何使用data.table执行此操作?我有大约100个变量的数百万行,其中很多都有数千个因子级别,我宁愿坚持使用data.table。我尝试了其他逐组变量问题的一些解决方案,但是他们都抛出了错误.N不是函数吗?我错过了一些非常明显的东西吗
答案 0 :(得分:1)
可以使用data.table::dcast
来传播数据。在OP使用的示例中,可以将dcast
添加为:
dcast(t1, Year ~ Loc, value.var = "N")
# Year A B C D E F G
# 1: 2010 3 2 2 2 2 3 3
# 2: 2011 3 3 2 2 2 2 3
# 3: 2012 3 3 3 2 2 2 2
# 4: 2013 2 3 3 3 2 2 2
# 5: 2014 2 2 2 3 3 2 2
# 6: 2015 2 2 2 2 3 3 2
即使是OP
所示的第二个中间步骤也不需要。可以使用fun.aggregate = length
到dcast
来获取每个位置的计数。
t1 <- data.table(ID = 1:100, Year = 2010:2015, Loc = LETTERS[1:7])
# Now use 'fun.aggregate' = length
dcast(t1, Year ~ Loc, fun.aggregate = length, value.var = "Loc")
# Year A B C D E F G
# 1: 2010 3 2 2 2 2 3 3
# 2: 2011 3 3 2 2 2 2 3
# 3: 2012 3 3 3 2 2 2 2
# 4: 2013 2 3 3 3 2 2 2
# 5: 2014 2 2 2 3 3 2 2
# 6: 2015 2 2 2 2 3 3 2