有没有办法执行与分组分开的汇总功能?
Is there a way to perform a summary function separate from the grouping?
我有以下格式的数据框:
Person Answer Value
John Yes 3
Pete No 6
Joan Yes 5
Joan Yes 4
Pete No 7
我想进行分析(并创建堆积条形图),我可以在其中按 Person(重复)和 Answer 变量分组,然后按值进行汇总。
我试过使用 dplyr 来执行此操作,但我 运行 遇到了问题。如果我在我的 dplyr 管道中使用 group_by 子句,我试图执行该功能的值将受到阻碍。
例如,
df2 <- df %>%
select(Person, Answer, Value) %>%
group_by(Person, Answer) %>%
summarise(sum(value = 3)/length(original dataframe ungrouped) + sum(value = 6)/length(original dataframe ungrouped)
我 运行 遇到的问题是如何正确执行此计算。数据分组后计算没有意义,因为分组后我最终得到 return 一个非常有限的数据框。
预期输出:
person answer value
Joan Yes. calculated value (summary stat)
Joan No. calculate value
John Yes. calculated value....
John No
Pete Yes
Pete No
最后,我想制作一个堆积条形图,其中显示了人员的摘要,并且条形图按“是”和“否”的答案划分为百分比。例如,有 3 个条:一个给 John,一个给 Pete,一个给 Joan,每个条都分为两部分(值基于 yes/no 响应)
谢谢!
我不明白你想要的结果是什么;这些都适合吗?
library(tidyverse)
df <- read.table(text = "Person Answer Value
John Yes 3
Pete No 6
Joan Yes 5
John No 6
Pete No 1", header = TRUE)
df2 <- df %>%
group_by(Person) %>%
mutate(proportion = Value / sum(Value))
df2
#> # A tibble: 5 x 4
#> # Groups: Person [3]
#> Person Answer Value proportion
#> <chr> <chr> <int> <dbl>
#> 1 John Yes 3 0.333
#> 2 Pete No 6 0.857
#> 3 Joan Yes 5 1
#> 4 John No 6 0.667
#> 5 Pete No 1 0.143
ggplot(df2, aes(x = Person, y = Value, fill = Answer)) +
geom_col(color = "black", position = "stack") +
geom_text(aes(label = Answer),
position = position_stack(vjust = 0.5))
ggplot(df2, aes(x = Person, y = proportion, fill = Answer)) +
geom_col(color = "black", position = "stack") +
geom_text(aes(label = round(proportion, 2)),
position = position_stack(vjust = 0.5))
由 reprex package (v2.0.0)
于 2021-08-12 创建
我有以下格式的数据框:
Person Answer Value
John Yes 3
Pete No 6
Joan Yes 5
Joan Yes 4
Pete No 7
我想进行分析(并创建堆积条形图),我可以在其中按 Person(重复)和 Answer 变量分组,然后按值进行汇总。
我试过使用 dplyr 来执行此操作,但我 运行 遇到了问题。如果我在我的 dplyr 管道中使用 group_by 子句,我试图执行该功能的值将受到阻碍。
例如,
df2 <- df %>%
select(Person, Answer, Value) %>%
group_by(Person, Answer) %>%
summarise(sum(value = 3)/length(original dataframe ungrouped) + sum(value = 6)/length(original dataframe ungrouped)
我 运行 遇到的问题是如何正确执行此计算。数据分组后计算没有意义,因为分组后我最终得到 return 一个非常有限的数据框。
预期输出:
person answer value
Joan Yes. calculated value (summary stat)
Joan No. calculate value
John Yes. calculated value....
John No
Pete Yes
Pete No
最后,我想制作一个堆积条形图,其中显示了人员的摘要,并且条形图按“是”和“否”的答案划分为百分比。例如,有 3 个条:一个给 John,一个给 Pete,一个给 Joan,每个条都分为两部分(值基于 yes/no 响应)
谢谢!
我不明白你想要的结果是什么;这些都适合吗?
library(tidyverse)
df <- read.table(text = "Person Answer Value
John Yes 3
Pete No 6
Joan Yes 5
John No 6
Pete No 1", header = TRUE)
df2 <- df %>%
group_by(Person) %>%
mutate(proportion = Value / sum(Value))
df2
#> # A tibble: 5 x 4
#> # Groups: Person [3]
#> Person Answer Value proportion
#> <chr> <chr> <int> <dbl>
#> 1 John Yes 3 0.333
#> 2 Pete No 6 0.857
#> 3 Joan Yes 5 1
#> 4 John No 6 0.667
#> 5 Pete No 1 0.143
ggplot(df2, aes(x = Person, y = Value, fill = Answer)) +
geom_col(color = "black", position = "stack") +
geom_text(aes(label = Answer),
position = position_stack(vjust = 0.5))
ggplot(df2, aes(x = Person, y = proportion, fill = Answer)) +
geom_col(color = "black", position = "stack") +
geom_text(aes(label = round(proportion, 2)),
position = position_stack(vjust = 0.5))
由 reprex package (v2.0.0)
于 2021-08-12 创建