如何计算dplyr中每列另一列的数据帧百分比?
df
包含以下记录
A target
a 1
b 0
a 0
a 1
这完成了第一部分
df %>%
group_by(A) %>%
summarise (n = n())
这是第二次
df %>%
group_by(A, target) %>%
summarise (n = n(), target_sum = sum(target))%>%
filter(target == 1) %>%
mutate(freq = n / target_sum)
但商是取自
在python / pandas中
grouped = df_original.groupby(['A', 'target']).size()
df = (grouped / grouped.groupby(level=0).sum())
grouped = df.reset_index(name='percentageA')
groupedOnly = grouped[grouped.target == 1]
将通过以下结果实现所需的计算:
a 1 0.666667
答案 0 :(得分:4)
你觉得太复杂了。尝试
df %>%
group_by(A) %>%
summarise (mean(target))
# A tibble: 2 x 2
# A `mean(target)`
# <fctr> <dbl>
# 1 a 0.6666667
# 2 b 0.0000000
答案 1 :(得分:2)
我们可以在table
prop.table
与R
一起使用
prop.table(table(df), 1)[,2]
# a b
#0.6666667 0.0000000
答案 2 :(得分:0)
这是您了解数据流动方式的一种方式,但我喜欢Alex的效率解决方案。
df <- tribble(
~A , ~target,
"a" , 1,
"b" , 0,
"a" , 0,
"a" , 1
)
df %>%
group_by(A) %>%
mutate(n = n()) %>%
group_by(A,target,n) %>%
mutate(n_target = n()) %>%
mutate(freq = n_target / n) %>%
filter(target==1) %>%
ungroup() %>%
distinct(A,target,freq)