使用频率列为多个类别创建百分比列

时间:2017-11-28 13:58:22

标签: r

我在R中有一个数据框,但我很难从我的频率列中创建百分比

 Species   Year   State   Disease.status  F
1 Hedgehog 1870     L       Negative      7
2 Hedgehog 1870     L       Positive      17
3   Badger 1990     K       Positive      8
4 Blue Tit 1991     P       Negative      5

我想编码以创建一个数据框,该数据框从“F”列创建一个百分比,该百分比给出一年中物种的百分比,该状态在“Disease.status”中产生阳性结果而不是阴性。对R来说是新手,任何帮助都会受到赞赏。

下表是我想从上表中制作的内容。

 Species   Year   State     F%
1 Hedgehog 1870     L       29
2   Badger 1990     K       100
3 Blue Tit 1991     P       0

2 个答案:

答案 0 :(得分:1)

你可以将{。{1}}的Disease.status列格式化为宽格式,然后进行计算,这可能是我首选的方法。

spread

答案 1 :(得分:0)

您可以尝试:

# read your data
d <- read.table(text="Species   Year   State   Disease.status  F
                Hedgehog 1870     L       Negative      7
                Hedgehog 1870     L       Positive      17
                Badger 1990     K       Positive      8
                BlueTit 1991     P       Negative      5", header=T)

library(tidyverse)
d %>% 
  group_by(Species, Year, State) %>% 
  summarise(total=sum(F),
        percent= round(sum(ifelse(Disease.status == "Positive",F/total,0))*100,1))
# A tibble: 3 x 5
# Groups:   Species, Year [?]
   Species  Year  State total percent
    <fctr> <int> <fctr> <int>   <dbl>
1   Badger  1990      K     8   100.0
2  BlueTit  1991      P     5     0.0
3 Hedgehog  1870      L    24    70.8

想法是对数据进行分组,然后使用汇总函数计算每个组中的总数。结果是使用ifelse设置否定值zero并总结百分比来计算结果。使用tidyverse/dplyr

一体化