有没有一个R函数可以根据另一个变量得到变量的比例?

deyfvvtc  于 2023-03-20  发布在  其他
关注(0)|答案(2)|浏览(126)

这是我的数据集摘要:

trajectory      context_face                     face    
 Min.   :  1   Pass     :404   Length:1204        Frown           :230  
 1st Qu.: 76   Undecided:400   Class :character   Scrunch         : 62  
 Median :151   Allow    :400   Mode  :character   Gasp            : 87  
 Mean   :151                                      Smile           :394  
 3rd Qu.:226                                      Neutral         :258  
 Max.   :301                                      Pout            : 25  
                                                  Wide-opened eyes:148

我想知道每个轨迹(通过、未决定、允许)下特定面部(例如,皱眉、紧缩)的比例(出现率)。换句话说,每个轨迹条件下有多少个皱眉或紧缩。
我尝试了函数describeBy(df,df$trajectory),但它不起作用。数据集已经是长格式的了。我想看到类似下面的内容(这里的值是随机的):

Pass     Undecided      Allow
Frown                   10         2             18
Scrunch                 19         20            4
Gasp                    23         18            14
Smile                   19         11            6
Neutral
Pout
Wide-opened eyes

我应该使用哪个函数呢?非常感谢。这是我的第一个问题,我不知道如何编辑它,我希望你仍然可以理解我的观点。

von4xj4u

von4xj4u1#

这是一种tidyverse方法

library(tidyverse)

df <- tibble(face = c('Frown','Scrunch','Gasp','Smile'),
             Pass = c(10,19,23,19),
             Undecided = c(2,20,18,11),
             Allow = c(18,4,14,6))

df %>%
  pivot_longer(cols = c(Pass, Undecided, Allow),
               names_to = 'trajectory',
               values_to = 'value') %>%
  group_by(face, trajectory) %>%
  summarize(occurence = sum(value)) %>%
  ungroup() %>%
  mutate(proportion = occurence/sum(occurence))
#> `summarise()` has grouped output by 'face'. You can override using the
#> `.groups` argument.
#> # A tibble: 12 × 4
#>    face    trajectory occurence proportion
#>    <chr>   <chr>          <dbl>      <dbl>
#>  1 Frown   Allow             18     0.110 
#>  2 Frown   Pass              10     0.0610
#>  3 Frown   Undecided          2     0.0122
#>  4 Gasp    Allow             14     0.0854
#>  5 Gasp    Pass              23     0.140 
#>  6 Gasp    Undecided         18     0.110 
#>  7 Scrunch Allow              4     0.0244
#>  8 Scrunch Pass              19     0.116 
#>  9 Scrunch Undecided         20     0.122 
#> 10 Smile   Allow              6     0.0366
#> 11 Smile   Pass              19     0.116 
#> 12 Smile   Undecided         11     0.0671

创建于2023年3月16日,使用reprex v2.0.2

wwwo4jvm

wwwo4jvm2#

要生成表格,可以执行以下操作:

table(df[,c("face","trajectory")])

要查看比例:

proportions(table(df[,c("face","trajectory")]))

要将此表转换为数据框,可以执行以下操作

as.data.frame(unclass(table(df[,c("face","trajectory")])))

您需要unclass它来生成列联表格式,否则您将获得变量和频率表

相关问题