这个问题在这里已有答案:
以下是与我的数据集类似的部分内容:
require(dplyr)
alldata
site date percent_rank Label
01A 2013-01-01 0.32 Normal
01B 2013-01-01 0.12 Low
01C 2013-01-01 0.76 High
02A 2013-01-01 0 N/A
02B 2013-01-01 0.16 Low
02C 2013-01-01 0.5 Normal
01A 2013-01-02 0.67 Normal
01B 2013-01-02 0.01 Low
01C 2013-01-02 0.92 High
我根据值为每个percent_rank分配了一个标签(三个类别为0到0.25到0.75到1) . 我现在想以这种格式生成一个汇总表:
site Low Normal High Missing
01A 32 47 92 194
01B 232 23 17 93
01C 82 265 12 6
其中每个站点将计算具有该站点标签的所有日期的低值,正常值和高值的出现次数(一年中的每一天都有一个),并且“丢失”将计算N / A值柱 .
我尝试过以下方法:
alldata <- %>% group_by(site) %>% mutate(length(Label == "Low"))
它返回所有记录的总值,而不是每个站点的“低”计数,以及
alldata <- %>% group_by(site) %>% mutate(length(which(Label == "Low")))
它返回的值比记录总数高几千 . 我的想法是,我会重复这个函数来创建四个新的列,其中包含四个单独的mutate行(每个类别一个),这将产生我的汇总表 . 我也试过了aggregate()的一些变体,虽然函数组件对于我的目标不太清楚 . 这似乎应该是一个非常简单的事情(group_by很好地计算了百分比等级和相关标签)但我还没有找到解决方案 . 任何提示都非常感谢!
3 回答
我们可以使用来自
data.table
的dcast
,它也有fun.aggregate
并且非常快 .或使用
dplyr/tidyr
base R
选项将是在
dplyr
中有三种方法可以做到这一点 . 第一个是最冗长的,另外两个使用便捷函数来缩短代码:要生成摘要表,可以使用
table
:data