更快的计算频率和从长格式转换为宽格式的方法
更快的计算频率和从长格式转换为宽格式的方法
我正在尝试获取两个变量“week”和“id”的每个组合级别的计数。我希望结果以“id”作为行,以“week”作为列,并将计数作为值。
以下是我目前尝试过的示例(尝试了很多其他方法,包括添加一个虚拟变量=1,然后在该变量上使用fun.aggregate = sum
):
library(plyr) ddply(data, .(id), dcast, id ~ week, value_var = "id", fun.aggregate = length, fill = 0, .parallel = TRUE)
然而,我肯定是做错了什么,因为这个函数没有完成。有没有更好的方法来做到这一点?
输入:
id week 1 1 1 2 1 3 1 1 2 3
输出:
1 2 3 1 2 1 1 2 0 0 1
问题的出现原因:在给定的数据集中,需要计算频率并将数据从长格式转换为宽格式。原始解决方法使用了`ddply`函数,但是在这种情况下,可以使用更快的方法来实现这个目标。
解决方法:可以使用`reshape2`包中的`dcast`函数来计算频率并将数据转换为宽格式。另外,也可以使用`base R`中的`xtabs`函数来实现相同的目标。
以下是使用`dcast`函数的解决方法的示例代码:
dat <- data.frame( id = c(rep(1, 4), 2), week = c(1:3, 1, 3) ) library(reshape2) dcast(dat, id~week, fun.aggregate=length) id 1 2 3 1 1 2 1 1 2 2 0 0 1
以下是使用`xtabs`函数的解决方法的示例代码:
xtabs(~id+week, data=dat) week id 1 2 3 1 2 1 1 2 0 0 1
通过使用这些方法,可以更快地计算频率并将数据从长格式转换为宽格式。