r - 对每个站点的标签进行计数并在 R 中创建汇总表

标签 r dplyr tidyr

下面是与我的数据集类似的部分内容:

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/

相关文章:

删除 geom_text_repel() 中选定的标签

R Web 抓取网站的多个级别

r - R中基于最大条件回填行

r - 创建一个新的数据框,其中包含前一个数据框中两列之间序列中每个值的行

r - H2O.深度学习神经网络

regex - R:需要用正则表达式替换不可见/重音字符

r - 识别 r 中的重复

按组将 NA 替换为 example()

r - 使用separate()分割不同大小的字符串

Rivot_longer 带有 stub 名称和最后一个下划线