通过43,000多个观测值来了解时间序列数据

时间:2019-10-07 03:56:13

标签: r time-series

更新后的帖子

经过大量工作,我终于合并了三个不同的数据集。结果是一个时间序列数据帧,其中包含对7个七个变量的43,396个观测值。下面,我列出了几行数据。

     Dyad  year  cyberattack  cybersev MID   MIDsev   peace score
     2360  2005    NA          NA       0      1          0
     2360  2006    NA          NA       NA     NA         0
     2360  2007    1           3.0      0      1          0
     2360  2008    1           4.0      0      1          0
     2360  2009    3           3.33     1      4          0
     2360  2010    1           3.0      NA     NA         0
     2360  2011    3           2.0      NA     NA         0
     2360  2012    1           2.0      NA     NA         0 
     2360  2013    4           2.0      NA     NA         0

如果我有兴趣比较不同国家/地区(二元对)发动攻击的频率(在网络空间中,在物理上使用MID或两者都不发)的不同...我该怎么做?

由于我使用的是国家(地区)/年份数据,因此如何在我的Dyad变量中获取不同国家/地区的描述性统计数据?例如,我想知道Dyad 2360(美国和伊朗)在行为上与其他国家相比如何。

我尝试了这段代码,但这只是给我列出了我唯一的二元组对:

    table(final$Dyadpair) 
    names(sort(-table(final$Dyadpair)))

您提到使用 aggregate dplyr -但我不知道这些方法如何使我能够描述我所有独特二元组的统计数据?您介意对此吗?

代码是否有可能返回如下内容:对于Dyad 2360,在2005-2013年期间,NA占80%,网络攻击占10%,MID攻击占10%,等等?


请澄清:

好的,是的-上面的示例只是假设的。基于我提供的九行数据-这是我希望R在描述性统计信息方面可以提供的内容。

Dyad :2360 无攻击:2005年和2006年的攻击率为22.22%(2/9)

网络攻击:在2007-2013年间77.78%(7/9)

MID攻击:2009年的11.11%(1/9)…。

网络和MID :2009年的11.11%(1/9)

从本质上讲,在给定的时间范围内(我在上面的示例中为2005-2013年),有多少年导致没有攻击,有多少年导致了网络攻击,有多少年导致了MID攻击,以及其中有多少年同时导致了网络攻击和MID攻击。

我不知道这对我的数据设置方式是否可行->因为我每年汇总网络攻击和MID攻击?是的,我也想考虑攻击的严重性(网络攻击和MID攻击),但我不知道该怎么做。

这是否有助于澄清我在寻找什么?

1 个答案:

答案 0 :(得分:0)

这是一种dplyr的方法,尽我所能。它将输出一个数据帧,每个双倍行一行,并且每个双倍行列具有相同的摘要统计信息。

library(dplyr)
your_data %>%
  group_by(Dyad) %>%
  summarize(
    year_range = paste(min(year), max(year), sep = "-"),
    no_attacks = mean(is.na(cyberattack) & (is.na(MID) | MID == 0)),
    cyber_attacks = mean(!is.na(cyberattack)),
    MID_attacks = mean(!is.na(MID) & MID > 0),
    cyber_and_MID = mean(!is.na(cyberattack) & (!is.na(MID) & MID > 0)),
    cyber_sev_weighted = weighted.mean(cyberattack, w = cybersev, na.rm = TRUE)
  )

# # A tibble: 1 x 7
#    Dyad year_range no_attacks cyber_attacks MID_attacks cyber_and_MID cyber_sev_weighted
#   <int> <chr>           <dbl>         <dbl>       <dbl>         <dbl>              <dbl>
# 1  2360 2005-2013       0.222         0.778       0.111         0.111               1.86

使用此数据:

your_data = read.table(text = 'Dyad  year  cyberattack  cybersev MID   MIDsev   peace_score
     2360  2005    NA          NA       0      1          0
     2360  2006    NA          NA       NA     NA         0
     2360  2007    1           3.0      0      1          0
     2360  2008    1           4.0      0      1          0
     2360  2009    3           3.33     1      4          0
     2360  2010    1           3.0      NA     NA         0
     2360  2011    3           2.0      NA     NA         0
     2360  2012    1           2.0      NA     NA         0 
     2360  2013    4           2.0      NA     NA         0', header = T)