R中的时间序列图,处理缺失数据
我正试图为我的数据绘制一个时间序列图——这是在探索(两个国家)随着时间的推移如何利用各种攻击(网络攻击与军事化的州际争端) 以下是我的数据的一部分:R中的时间序列图,处理缺失数据,r,time-series,timeserieschart,R,Time Series,Timeserieschart,我正试图为我的数据绘制一个时间序列图——这是在探索(两个国家)随着时间的推移如何利用各种攻击(网络攻击与军事化的州际争端) 以下是我的数据的一部分: Dyadpair year cyberattack cyberseverity MID MIDhostility 200345 1992 NA NA 1 3.00 200345 1993 NA NA
Dyadpair year cyberattack cyberseverity MID MIDhostility
200345 1992 NA NA 1 3.00
200345 1993 NA NA 2 2.667
200345 1998 NA NA 12 2.667
200345 1999 NA NA 16 2.500
20045 2000 NA NA 0 1.00
2365 2000 NA NA 3 1.75
2365 2008 6 3.833 NA NA
2356 2009 2 2.50 NA NA
2365 2014 7 3.14 NA NA
我想创建一个时间序列图,显示:
1) Dyadpair如何随着时间的推移而改变其使用网络攻击的方式,以及这些网络攻击的严重性如何随着时间的推移而变化
2) Dyadpair如何随着时间的推移而改变他们如何使用MID(军事化的州际争端),以及这些MID的敌意如何随着时间的推移而改变
问题是我有很多丢失的数据(NAs)。这是因为网络数据只在2000-2015年间运行,而我的另一个数据集在1992-2010年间运行
尽管存在数据缺失的问题,我应该如何创建上面描述的时间序列图
更新:我想出了如何使用dplyr的“过滤器”功能来选择一个二元:
library(dplyr)
USRUS <-total %>%
select (Dyadpair, year, cyberattack, cyberseverity, MID, midhostility) %>%
filter(Dyadpair == "2365")
但是,我如何着手创建一个阴谋,显示网络攻击(和严重性)和军事攻击(和严重性),随着时间的推移,这一特定的二元关系(2365:美国和俄罗斯)?因为到目前为止,我的情节只反映了美国和俄罗斯在网络空间的行为——它不包括任何关于中间或中间敌意/严重性的内容 您面临两个挑战:可视化和数据争用。丢失数据实际上并不是您的难题之一,您将在数据整理好后看到这一点。当你刚接触R时,制定一个攻击计划可能是它自己的挑战,但它应该从最终目标开始。在这种情况下,我建议绘制两幅图:
- 一个显示随时间推移的攻击次数,以及
- 另一个显示随着时间的推移攻击的严重性
- 达达派尔
- 年
- 攻击类别(中型或网络型)
- 类别中的攻击数
- 攻击的严重性
library(dplyr)
library(tidyr)
library(ggplot2)
original.df <- tribble(
~Dyadpair, ~year, ~cyberattack, ~cyberseverity, ~MID, ~MIDhostility,
200345, 1992, NA, NA, 1, 3.00,
200345, 1993, NA, NA, 2, 2.667,
200345, 1998, NA, NA, 12, 2.667,
200345, 1999, NA, NA, 16, 2.500,
20045, 2000, NA, NA, 0, 1.00,
2365, 2000, NA, NA, 3, 1.75,
2365, 2008, 6, 3.833, NA, NA,
2356, 2009, 2, 2.50, NA, NA,
2365, 2014, 7, 3.14, NA, NA
)
# Split the data into separate data frames for military and cyber. Rename
# columns for severity and attack number for consistency with the other dataset
military.df <- select(original.df, Dyadpair, year, attack = MID, severity = MIDhostility) %>%
filter(!is.na(attack)) %>% # remove rows with no data
mutate(attack_type = "MID") # add column identifying attack type
cyber.df <- select(original.df, Dyadpair, year, attack = cyberattack, severity = cyberseverity) %>%
filter(!is.na(attack)) %>%
mutate(attack_type = "cyber")
# Now combine the two dataframes into one. We've already ensured
# that they have the same columns, so we'll just concatenate them.
# Since attack_type is a categorical variable, we should make it
# a factor.
df <- bind_rows(military.df, cyber.df) %>%
mutate(attack_type = factor(attack_type))
df
# A tibble: 9 x 5
# Dyadpair year attack severity attack_type
# <dbl> <dbl> <dbl> <dbl> <fct>
# 1 200345 1992 1 3 MID
# 2 200345 1993 2 2.67 MID
# 3 200345 1998 12 2.67 MID
# 4 200345 1999 16 2.5 MID
# 5 20045 2000 0 1 MID
# 6 2365 2000 3 1.75 MID
# 7 2365 2008 6 3.83 cyber
# 8 2356 2009 2 2.5 cyber
# 9 2365 2014 7 3.14 cyber
您还询问了关于绘制单个Dyadpair的数据,并说您希望显示军事和网络类别的年份、攻击次数和攻击严重程度。只有这么多的美学,你可以映射数据,你开始用尽,但这里去
- x轴年
- y轴攻击次数
- 攻击的严重性
usrus.df <- filter(df, Dyadpair == "2365")
ggplot(data = usrus.df, aes(x = year, y = attack, color = severity)) +
geom_point() +
geom_line() +
facet_wrap(facets = vars(attack_type)) +
ylab("attacks") +
ggtitle("USRUS")
usrus.df您尝试了什么<代码>绘图
函数很好地忽略了NaN,所以您应该没有理由不能绘图。如果你展示你的尝试和错误,我们可能help@Chelmy88,NaN
与NA
不同。。。但是你的其余评论仍然适用。@r2evans的确……纽特,虽然的主题与数据丢失有关,但我觉得它不适用于这里,因此你要么只显示两个数据都有的年份,要么接受一个值将很好地开始绘图。您的数据是一个良好的开端,感谢您将其包括在内,如果我们在这个时间跨度内实际看到相同的Dyadpair
(可能是2-3)数据,这可能会有所帮助。正如Chelmy88所建议的那样,它仍然可以很好地绘制,但这取决于您是如何做到这一点的。您能提供一些代码吗?非常感谢您的帮助和建议,特别是您关于从最终目标开始的提示。数据争论很有道理。我已经为我所有的数据做了这些,但现在我有三个后续问题。1.我将“严重性”合并到一个类别/情节中,即使这些攻击严重性的等级不一定相同,也可以吗?(他们来自两个不同的数据集。中度敌意的量表范围为1-5,网络敌意的量表范围为1-10)。将我的数据组织到一个包含“攻击类型”类别的框架中,现在意味着我有1016个观察值。(在我的数据争论之前,我只有992次观察)。因为网络数据非常小,所以在2000-2010年间,它并没有真正出现在我的GGP图上。我能做些什么吗。这些情节也没有给我任何关于二人组的信息。我假设我不可能把所有的底片都放在一块地上,因为有这么多底片。如果为了避免这个问题,我选择了一些具体的动态,给我的读者一个“案例研究”的例子,说明随着时间的推移,这可能会是什么样子呢?我是否可以选择一个二元(例如200645——代表英国和伊拉克)并为该二元创建一个情节——让我的读者更多地了解二元在一段时间内使用了哪些攻击(网络攻击或MID攻击)?1)如果严重性等级不同,那么我不会将它们放在同一个情节中;2) 为军事和网络攻击创建单独的阴谋。绘图将根据数据进行缩放;3) 你得玩这个。您可以使用dplyr::filter
获取特定动态的行。通过将颜色映射到Dyadpair,您可以尝试一次绘制许多颜色,以查看是否出现大规模趋势。下面是一个关于绘制的快速跟进。请看我更新的帖子。
ggplot(df, aes(x = year, y = attack, color = attack_type)) +
geom_line()
ggplot(df, aes(x = year, y = severity, color = attack_type)) +
geom_line()
usrus.df <- filter(df, Dyadpair == "2365")
ggplot(data = usrus.df, aes(x = year, y = attack, color = severity)) +
geom_point() +
geom_line() +
facet_wrap(facets = vars(attack_type)) +
ylab("attacks") +
ggtitle("USRUS")