每组 dplyr 百分比
dplyr percentage per group
如何计算 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
我们可以在 R
中使用 table
和 prop.table
prop.table(table(df), 1)[,2]
# a b
#0.6666667 0.0000000
你想的太复杂了。尝试
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
这是您查看数据流动方式的一种方式,但我喜欢 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)
如何计算 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
我们可以在 R
table
和 prop.table
prop.table(table(df), 1)[,2]
# a b
#0.6666667 0.0000000
你想的太复杂了。尝试
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
这是您查看数据流动方式的一种方式,但我喜欢 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)