r - 每个值每年的百分比

标签 r count percentage

我的数据

Chemical  date      concentration  limit
A     01-01-2016     0.2         0.01
A     01-02-2016     0.2         0.01
A     01-01-2017     0.005       0.01
A     01-02-2017     0.2         0.01
B     01-01-2016     0.3         0.1
B     01-02-2016     0.05        0.1
B     01-01-2017     0.2         0.1
B     01-02-2017     0.2         0.1
C     01-01-2016     1.2         1
C     01-02-2016     0.8         1
C     01-01-2017     0.9         1
C     01-02-2017     0.9         1

我想显示每种化学品每年超过限制的百分比(请注意,每个限制都是不同的)。所以我想要得到这样的东西

Year   A         B     C
2016   100%     50%   50%
2017   50%      100%   0

我已经有了计算每种化学物质每年超过的次数的代码,但是在计算百分比时我弄错了。

这个我得数数了。

  library(tidyverse)
   counts<- data %>% 
   group_by(Chemical, grp = format(date, format = '%Y')) %>% 
   mutate(exceed = concentration >= limit) %>% # TRUE/FALSE
   summarise(tot_exceed = sum(exceed)) %>%  # count each T/F
   spread(Chemical, tot_exceed, fill = 0)

所以我明白了

   Year   A     B    C
   2016   2     1    1
   2017   1     2    0

对于百分比,我尝试了这个。

percentage_exceed<- data %>% 
group_by(Chemical, grp = format(date, format = '%Y')) %>% 
mutate(exceed = concentration >= limit, countconc = length(concentration)) 
%>% 
summarise(percent = (sum(exceed)/countconc)*100) %>% 
spread(Chemical, percent, fill = 0)

但是我没有得到我想要的结果。你能帮我吗?

最佳答案

dt = read.table(text = "
Chemical  date      concentration  limit
A     01-01-2016     0.2         0.01
A     01-02-2016     0.2         0.01
A     01-01-2017     0.005       0.01
A     01-02-2017     0.2         0.01
B     01-01-2016     0.3         0.1
B     01-02-2016     0.05        0.1
B     01-01-2017     0.2         0.1
B     01-02-2017     0.2         0.1
C     01-01-2016     1.2         1
C     01-02-2016     0.8         1
C     01-01-2017     0.9         1
C     01-02-2017     0.9         1
", header=T)

library(tidyverse)
library(lubridate)

dt %>%
  mutate(year = year(dmy(date))) %>%
  group_by(year, Chemical) %>%
  summarise(Total = n(),
            Num_exceed = sum(concentration >= limit)) %>%
  ungroup() %>%
  mutate(Prc = paste0(Num_exceed / Total * 100,"%")) %>%
  select(year, Chemical, Prc) %>%
  spread(Chemical, Prc)

# # A tibble: 2 x 4
#    year A     B     C    
#   <dbl> <chr> <chr> <chr>
# 1  2016 100%  50%   50%  
# 2  2017 50%   100%  0%  

关于r - 每个值每年的百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53813647/

相关文章:

r - 使用 Caret 进行主成分分析

php - 用 php 计算字符串中大写字母的最简单、最短的方法?

python - 如何使用python计算csv文件分组项目中特定项目的出现次数

java - 与Android/java中的今天相比,两个日期之间的百分比

php - 根据给定的百分比在两个项目之间进行选择

javascript - 使用百分号比较? % JavaScript

r - 如何在 R 中获得逆 CDF(内核)?

python - Snakemake - 在调用外部脚本之前加载集群模块

python - Django Python - 本月和过去 6 个月的查询计数

r - 使用ggplot突出周末?