如何在 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())
这里prop
是v2psoppaut_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)))
我正在处理关于专制政权中反对程度的时间序列数据集。我在下面包含了一个数据样本。我想制作一个 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())
这里prop
是v2psoppaut_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)))