提问人:Basil 提问时间:10/30/2023 最后编辑:ThomasIsCodingBasil 更新时间:10/31/2023 访问量:49
R 中的比例表,考虑了独特的人
table of proportions in R taking into account unique persons
问:
我有 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% 的人选择了葡萄等。
谁能提出任何使用参与者人数作为分母来计算每种水果百分比的代码?
答:
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
下一个:NumPy 重塑不做功能
评论