R 中的比例表,考虑了独特的人

table of proportions in R taking into account unique persons

提问人:Basil 提问时间:10/30/2023 最后编辑:ThomasIsCodingBasil 更新时间:10/31/2023 访问量:49

问:

我有 3 个人在研究中。他们被要求随心所欲地捡起尽可能多的水果。然后,我想计算每个水果被捡到的次数,并使用参与者的数量作为分母创建一个比例。

我有一个参与者 ID 和水果名称,排列在下表中,如下所示:

id<-c("a","a","a","b","b","c","c","c","c")
fruit<-c("apple","pear","orange","apple","grapes","apple","pear","orange","grapefruit")
data<-data.frame(id,fruit, stringsAsFactors = FALSE)

#I would normally approach the problem using the tabyl function
janitor::tabyl(data,fruit)

百分比包括分母中的所有值,这不是我想要的。它说 33% 的人选择了苹果,而我需要的百分比是 100% 的人选择了苹果,33% 的人选择了葡萄等。

谁能提出任何使用参与者人数作为分母来计算每种水果百分比的代码?

r 重塑

评论


答:

3赞 Maël 10/30/2023 #1

dplyr:

library(dplyr)
data |> 
  summarise(
    n = n(), 
    percent = n() / n_distinct(data$id) * 100,
    .by = fruit
  )

#        fruit n   percent
# 1      apple 3 100.00000
# 2       pear 2  66.66667
# 3     orange 2  66.66667
# 4     grapes 1  33.33333
# 5 grapefruit 1  33.33333

data.table:

setDT(data)[, .(n = .N, percent = .N / length(unique(data$id))), by = fruit]
3赞 ThomasIsCoding 10/31/2023 #2

使用colMeans + table

> rev(stack(colMeans(table(data)) * 100))
         ind    values
1      apple 100.00000
2 grapefruit  33.33333
3     grapes  33.33333
4     orange  66.66667
5       pear  66.66667
1赞 s_baldur 10/31/2023 #3
n_participants <- length(unique(data$id))
pick_count     <- table(data$fruit)

pick_count / n_participants
#     apple grapefruit     grapes     orange       pear 
# 1.0000000  0.3333333  0.3333333  0.6666667  0.6666667