我在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
答案 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