我想计算符合特定条件的观测值的百分比,然后将该值添加到与列和行名称具有相同条件的单元格中的新数据框中。然后,我想为数据中表示的每个月创建一个单独的数据框。我从中提取的数据如下:
Occurrence Total Criteria1 Criteria2 Month
1 20 A 2016 Jan
5 50 B 2016 Feb
0 10 C 2016 Mar
1 50 A 2017 Jan
5 10 B 2017 Feb
0 20 C 2017 Mar
新数据框如下所示:
(Jan) 2016 2017
A 0.05 0.02
(Feb)
B 0.1 0.5
(Mar)
C 0 0
因此,我试图编写一个for循环或类似的东西来计算出现的百分比,然后根据首先将它们分组的标准将它们添加到一个新的空数据框中。到目前为止,我的代码如下:
for(i in unique(data$month)){
df %>%
group_by(Criteria1, Criteria2) %>%
summarise(Perc = Occurrence / Total) %>%
spread(Criteria2, Perc)}
答案 0 :(得分:1)
使用xtabs
xtabs(Perc ~ Criteria1 + Criteria2, transform(df, Perc = Occurrence / Total))
# Criteria2
#Criteria1 2016 2017
# A 0.05 0.02
# B 0.10 0.50
# C 0.00 0.00
或tidyverse
选项
library(tidyverse)
df %>%
group_by(Criteria1, Criteria2) %>%
summarise(Perc = Occurrence / Total) %>%
spread(Criteria2, Perc)
## A tibble: 3 x 3
## Groups: Criteria1 [3]
# Criteria1 `2016` `2017`
# <fct> <dbl> <dbl>
#1 A 0.05 0.02
#2 B 0.1 0.5
#3 C 0 0
获取更新的数据
df %>%
group_by(Criteria1, Criteria2, Month) %>%
summarise(Perc = Occurrence / Total) %>%
spread(Criteria2, Perc)
## A tibble: 3 x 4
## Groups: Criteria1 [3]
# Criteria1 Month `2016` `2017`
# <fct> <fct> <dbl> <dbl>
#1 A Jan 0.05 0.02
#2 B Feb 0.1 0.5
#3 C Mar 0 0
或者在基数R中是这样的
xtabs(
Perc ~ Criteria1 + Criteria2,
transform(df, Perc = Occurrence / Total, Criteria1 = paste(Criteria1, Month, sep = "_")))
# Criteria2
#Criteria1 2016 2017
#A_Jan 0.05 0.02
#B_Feb 0.10 0.50
#C_Mar 0.00 0.00