如何在多种条件下使用dplyr中的函数?

发布于 2025-01-27 13:19:32 字数 1770 浏览 5 评论 0原文

我正在使用涵盖2003年至2018年期间的时间序列越野数据集。数据库中的每个条目都对应于抗议活动,参与者的数量,安全服务的参与程度以及参与者暴力的水平。我每个国家每年都有多次观察。我想创建一个新的df来计算每个国家/地区的抗议数(count),参与者的平均数量(avggparticipants),平均安全服务参与度(avgsecurity)和参与者暴力的平均水平(avggpartviolence)。这是我迄今为止编写的代码:

# Creating Yearly Protest Count Data
# Load packages
library(dplyr)

# Set working directory 
setwd("~/Desktop/Cooptation and Protest")

# Load data
dat <- read.csv("reports.csv")

# Subset to relevant variables
dat <- dat %>%
  select(cowcode, event_date, side, scope, part_violence, sec_engagement,
         numparticipants)

# Convert event_date to only year
dat$event_date <-  as.Date(dat$event_date)
dat$year <- as.numeric(format(dat$event_date,'%Y'))

my_summary_data <- dat %>%
  group_by(year, cowcode) %>%
  summarise(Count = n()) %>%
  summarise(AvgSecurity = mean(sec_engagement)) %>%
  summarise(AvgPartviolence = mean(part_violence))

运行总结时没有问题(count = n()),但是我无法运行汇总(avgsecurity = sean = mean(sec_engagation) ))汇总(avgpartviolence = mean(part_violence))工作。任何建议将不胜感激。以下是一些数据,为您方便。

structure(list(cowcode = c(40L, 40L, 40L, 40L, 40L, 40L), event_date = structure(c(12183, 
15302, 12173, 12173, 12393, 12583), class = "Date"), side = c(0L, 
1L, 0L, 0L, 0L, 0L), scope = c(0L, 0L, 0L, 0L, 0L, 0L), part_violence = c(NA_integer_, 
NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_
), sec_engagement = c(NA_integer_, NA_integer_, NA_integer_, 
NA_integer_, NA_integer_, NA_integer_), numparticipants = c("", 
"", "", "", "2000", ""), year = c(2003, 2011, 2003, 2003, 2003, 
2004)), row.names = c(NA, 6L), class = "data.frame")

I am working with a time-series cross-country dataset covering the period from 2003 to 2018. Each entry in the database corresponds to a protest event, the number of participants, level of engagement of the security services, and level of participant violence. I have multiple observations per year per country. I want to create a new df that counts the number of protests for each country (Count), the average number of participants (AvgParticipants), the average security services engagement (AvgSecurity), and the average level of participant violence (AvgPartViolence). Here is the code I have written thus far:

# Creating Yearly Protest Count Data
# Load packages
library(dplyr)

# Set working directory 
setwd("~/Desktop/Cooptation and Protest")

# Load data
dat <- read.csv("reports.csv")

# Subset to relevant variables
dat <- dat %>%
  select(cowcode, event_date, side, scope, part_violence, sec_engagement,
         numparticipants)

# Convert event_date to only year
dat$event_date <-  as.Date(dat$event_date)
dat$year <- as.numeric(format(dat$event_date,'%Y'))

my_summary_data <- dat %>%
  group_by(year, cowcode) %>%
  summarise(Count = n()) %>%
  summarise(AvgSecurity = mean(sec_engagement)) %>%
  summarise(AvgPartviolence = mean(part_violence))

I have no issue when I run summarise(Count = n()), but I can't get running summarise(AvgSecurity = mean(sec_engagement)) and summarise(AvgPartviolence = mean(part_violence)) to work. Any advice would be appreciated. Below are some data for your convenience.

structure(list(cowcode = c(40L, 40L, 40L, 40L, 40L, 40L), event_date = structure(c(12183, 
15302, 12173, 12173, 12393, 12583), class = "Date"), side = c(0L, 
1L, 0L, 0L, 0L, 0L), scope = c(0L, 0L, 0L, 0L, 0L, 0L), part_violence = c(NA_integer_, 
NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_
), sec_engagement = c(NA_integer_, NA_integer_, NA_integer_, 
NA_integer_, NA_integer_, NA_integer_), numparticipants = c("", 
"", "", "", "2000", ""), year = c(2003, 2011, 2003, 2003, 2003, 
2004)), row.names = c(NA, 6L), class = "data.frame")

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

┼── 2025-02-03 13:19:32

评论有!

library(tidyverse)

dat <- structure(list(cowcode = c(40L, 40L, 40L, 40L, 40L, 40L), event_date = structure(c(12183, 
15302, 12173, 12173, 12393, 12583), class = "Date"), side = c(0L, 
1L, 0L, 0L, 0L, 0L), scope = c(0L, 0L, 0L, 0L, 0L, 0L), part_violence = c(NA_integer_, 
NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_
), sec_engagement = c(NA_integer_, NA_integer_, NA_integer_, 
NA_integer_, NA_integer_, NA_integer_), numparticipants = c("", 
"", "", "", "2000", ""), year = c(2003, 2011, 2003, 2003, 2003, 
2004)), row.names = c(NA, 6L), class = "data.frame")

dat$event_date <-  as.Date(dat$event_date)
dat$year <- as.numeric(format(dat$event_date,'%Y'))

my_summary_data <- dat %>%
  group_by(year, cowcode) %>%
  summarise(Count = n(),
           AvgSecurity = mean(sec_engagement),
           AvgPartviolence = mean(part_violence)) 

my_summary_data

The comment has it!

library(tidyverse)

dat <- structure(list(cowcode = c(40L, 40L, 40L, 40L, 40L, 40L), event_date = structure(c(12183, 
15302, 12173, 12173, 12393, 12583), class = "Date"), side = c(0L, 
1L, 0L, 0L, 0L, 0L), scope = c(0L, 0L, 0L, 0L, 0L, 0L), part_violence = c(NA_integer_, 
NA_integer_, NA_integer_, NA_integer_, NA_integer_, NA_integer_
), sec_engagement = c(NA_integer_, NA_integer_, NA_integer_, 
NA_integer_, NA_integer_, NA_integer_), numparticipants = c("", 
"", "", "", "2000", ""), year = c(2003, 2011, 2003, 2003, 2003, 
2004)), row.names = c(NA, 6L), class = "data.frame")

dat$event_date <-  as.Date(dat$event_date)
dat$year <- as.numeric(format(dat$event_date,'%Y'))

my_summary_data <- dat %>%
  group_by(year, cowcode) %>%
  summarise(Count = n(),
           AvgSecurity = mean(sec_engagement),
           AvgPartviolence = mean(part_violence)) 

my_summary_data
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文