有没有办法执行与分组分开的汇总功能?

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 创建