R语言 如何获得一个加权频率表与比例?

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

我正在处理一个包含分层后权重的数据集,我正在寻找一种方法来获得关于特定变量的更多信息,但我很挣扎。
下面是一个示例 Dataframe :

a <- c(1, 3, 2, 1, 2, 2, 3, 3, 1, 3, NA, NA)
wght <- c(0.8, 0.9, 1.2, 1.5, 0.5, 1, 0.7, 0.9, 0.8, 1.1, 1, 0.8)
df <- data.frame(a, wght)

a列包含对问题的编码回答(比如agree/neutral/disagree),wght包含权重,我发现了一种显示加权观测数的方法:

library(magrittr)
df %>% dplyr::count(a, wt=wght)

现在我想从descr软件包中获取freq的发行版信息(特别是百分比和有效百分比)。我尝试了各种方法,比如下面的方法,但是它产生了一个奇怪的频率表。

dfwt <- df %>% count(a, wt=wght)
freq(dfwt$a)
laik7k3q

laik7k3q1#

{descr}中的freq按如下方式使用:

df$a <- factor(df$a, levels = c(1, 2, 3), labels = c("agree", "neutral", "disagree"))

descr::freq(df$a, df$wght, plot = FALSE)

# df$a 
#          Frequency Percent Valid Percent
# agree          3.1   27.68         32.98
# neutral        2.7   24.11         28.72
# disagree       3.6   32.14         38.30
# NA's           1.8   16.07              
# Total         11.2  100.00        100.00
f4t66c6m

f4t66c6m2#

你可以使用xtabs并转换as.data.frame,这样你就不需要加载包了。然后只需要cbind转换proportions。有效的百分比是在没有NA的情况下计算的。

tbl <- as.data.frame(xtabs(wght ~ a, df, addNA=TRUE))

cbind(tbl, perc=proportions(tbl$Freq)*100, valid_perc=c(proportions(na.omit(tbl)$Freq), NA)*100)
#      a Freq     perc valid_perc
# 1    1  3.1 27.67857   32.97872
# 2    2  2.7 24.10714   28.72340
# 3    3  3.6 32.14286   38.29787
# 4 <NA>  1.8 16.07143         NA
  • 数据:*
df <- structure(list(a = c(1, 3, 2, 1, 2, 2, 3, 3, 1, 3, NA, NA), wght = c(0.8, 
0.9, 1.2, 1.5, 0.5, 1, 0.7, 0.9, 0.8, 1.1, 1, 0.8)), class = "data.frame", row.names = c(NA, 
-12L))

相关问题