计算具有特定行条件的列的百分比
Calculate percentage for a column with certain condition of rows
我有以下数据框:
sleep health count prop
1 7 Good 100 NA
2 7 Normal 75 NA
3 7 Bad 25 NA
4 8 Good 125 NA
5 8 Normal 75 NA
6 8 Bad 25 NA
我想用基于 sleep
组的 count
的每个百分比填充 prop
列。例如,前 3 行 prop
应为 0.5、0.375 和 0.125,然后最后 3 行 prop
分别为 0.555、0.333 和 0.111。
这可以手动完成,方法是先用 sleep
分隔数据框,然后对每个数据框使用 prop.table(prop)
,但是由于有很多 sleep
组,我找不到简洁的方法来做到这一点。有什么想法吗?
在 R
中,我们可以通过 'sleep'
分组后除以 'count' 的 sum
来完成此操作
library(dplyr)
df1 %>%
group_by(sleep) %>%
mutate(prop = round(count/sum(count), 3))
# sleep health count prop
# <int> <chr> <int> <dbl>
#1 7 Good 100 0.500
#2 7 Normal 75 0.375
#3 7 Bad 25 0.125
#4 8 Good 125 0.556
#5 8 Normal 75 0.333
#6 8 Bad 25 0.111
或使用base R
df1$prop <- with(df1, ave(count, sleep, FUN=prop.table))
我有以下数据框:
sleep health count prop
1 7 Good 100 NA
2 7 Normal 75 NA
3 7 Bad 25 NA
4 8 Good 125 NA
5 8 Normal 75 NA
6 8 Bad 25 NA
我想用基于 sleep
组的 count
的每个百分比填充 prop
列。例如,前 3 行 prop
应为 0.5、0.375 和 0.125,然后最后 3 行 prop
分别为 0.555、0.333 和 0.111。
这可以手动完成,方法是先用 sleep
分隔数据框,然后对每个数据框使用 prop.table(prop)
,但是由于有很多 sleep
组,我找不到简洁的方法来做到这一点。有什么想法吗?
在 R
中,我们可以通过 'sleep'
sum
来完成此操作
library(dplyr)
df1 %>%
group_by(sleep) %>%
mutate(prop = round(count/sum(count), 3))
# sleep health count prop
# <int> <chr> <int> <dbl>
#1 7 Good 100 0.500
#2 7 Normal 75 0.375
#3 7 Bad 25 0.125
#4 8 Good 125 0.556
#5 8 Normal 75 0.333
#6 8 Bad 25 0.111
或使用base R
df1$prop <- with(df1, ave(count, sleep, FUN=prop.table))