下面是与我的数据集类似的部分内容:
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
我根据值(三个类别为 0 到 0.25 到 0.75 到 1)为每个percent_rank 分配了一个标签。我现在想以这种格式生成一个汇总表:
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"))
返回所有记录的总值(value),而不是每个站点的“低”计数,并且
alldata <- %>% group_by(site) %>% mutate(length(which(Label == "Low")))
返回的值比记录总数高几千。我的想法是,我将重复此函数来创建四个新列,其中包含四个单独的变异行(每个类别一个),这将生成我的汇总表。我还尝试了aggregate()的一些变体,尽管我不太清楚函数组件的目的是什么。这看起来应该是一件非常简单的事情(group_by 很好地为我计算了百分比排名和相关标签),但到目前为止我还没有找到解决方案。非常感谢任何提示!
最佳答案
在 dplyr
中可以通过三种方式执行此操作。第一个是最冗长的,另外两个使用便利函数来缩短代码:
library(reshape2)
library(dplyr)
alldata %>% group_by(site, Label) %>% summarise(n=n()) %>% dcast(site ~ Label)
alldata %>% group_by(site, Label) %>% tally %>% dcast(site ~ Label)
alldata %>% count(site, Label) %>% dcast(site ~ Label)
关于r - 对每个站点的标签进行计数并在 R 中创建汇总表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37951994/