如何在 R 中创建一个 table 来显示每年等于某个值的观察百分比?

How to create a table in R that displays the percentage of observations per year equal to a certain value?

我正在处理关于专制政权中反对程度的时间序列数据集。我在下面包含了一个数据样本。我想制作一个 table 来显示每年 v2psoppaut 值为 1 的国家/地区的百分比。有人能告诉我该怎么做吗?我想生成一个 table,我可以将其另存为新的 df 用于绘图。

structure(list(year = 1900:1905, COWcode = c(70L, 70L, 70L, 70L, 
70L, 70L), country_name = c("Mexico", "Mexico", "Mexico", "Mexico", 
"Mexico", "Mexico"), country_text_id = c("MEX", "MEX", "MEX", 
"MEX", "MEX", "MEX"), v2x_regime = c(0L, 0L, 0L, 0L, 0L, 0L), 
    v2psoppaut_ord = c(2L, 2L, 2L, 2L, 2L, 2L)), row.names = c(NA, 
6L), class = "data.frame")

尝试使用 tidyverse 中的 dplyr 按年份对数据进行分组,然后通过对 v2psoppaut_ord 等于 1 的行的总和除以使用 n() 函数获得该组(例如年份)内的总行数。将其保存到新的 df 以进行绘图。您将有两个值:year 和 auth,后者表示您指定的变量值为 1 的国家/地区的比例(乘以 100 以获得百分比)。不要忘记使用 ungroup()

取消分组数据
library(tidyverse)

plot_df <- df %>%
  group_by(year) %>%
  summarize(auth = sum(v2psoppaut_ord == 1, na.rm = T) / n()) %>%
  ungroup()

假设当您按年份分组时,每个国家/地区只有 一个观察值,那么您可以这样做:

df %>% 
  group_by(year) %>% 
  summarize(prop = sum(v2psoppaut_ord == 1)/n())

这里propv2psoppaut_ord == 1占组中行数的比例。如果组中的行是国家/地区,那么这将为您提供所需的内容。你的数据应该看起来像这样才能工作:

df <- data.frame(year = c(rep(1900,3),rep(1901,3),rep(1902,3)), 
                 country_name = c(rep(c("Mexico", "Canada", "US"),3)), 
                 v2psoppaut_ord = c(sample(1:4,9,replace = T)))