长宽数据转换
数据集可从www.childmortality.org下载,名为“五岁以下儿童、婴儿和新生儿死亡率估计”。
#查看数据集的维度
dim(Exercise.1.Dataset)
结果:585行399列
#返回数据集缺失值的个数和百分比
sum(is.na(Exercise.1.Dataset))
mean(is.na(Exercise.1.Dataset))
结果:共57980个缺失值
#对缺失值进行可视化探索
library(‘VIM’)aggr(Exercise.1.Dataset, prop = FALSE, number = TRUE)
#将数据集子集化为每个国家的中值估计(删除表示上下不确定边界的行),并同时将数据集中无效变量ISO.Code和Uncertainty.bounds剔除,以达到化简数据集的目的
da <- aggregate(Exercise.1.Dataset[,4:399],list(Exercise.1.Dataset[,2]),median)
sum(is.na(da))
mean(is.na(da))
结果:19359个缺失值,占比25.01%
#宽数据转换为长数据#使用melt 函数将宽数据da转换为长数据da1
install.packages(‘reshape2’)
library(‘reshape2’)
da1 <- melt(da ,id.vars=‘Group.1’,variable.name=‘U5MR.1950:Neonatal.Deaths.2015’)
#使用substr函数将变量“U5MR.1950:Neonatal.Deaths.2015”分解为“type”和“year”两个变量,最终得到数据集da3即所需长数据集
aa <- da1
‘
U
5
M
R
.
1950
:
N
e
o
n
a
t
a
l
.
D
e
a
t
h
s
.
2015
‘
a
a
1
<
−
a
s
.
v
e
c
t
o
r
(
a
a
,
m
o
d
e
=
"
c
h
a
r
a
c
t
e
r
"
)
l
e
n
g
t
h
=
a
s
.
i
n
t
e
g
e
r
(
n
c
h
a
r
(
a
a
1
)
)
d
a
1
`U5MR.1950:Neonatal.Deaths.2015` aa1 <- as.vector(aa,mode = "character") length=as.integer(nchar(aa1)) da1
‘U5MR.1950:Neonatal.Deaths.2015‘aa1<−as.vector(aa,mode="character")length=as.integer(nchar(aa1))da1type <- substr(da1
‘
U
5
M
R
.
1950
:
N
e
o
n
a
t
a
l
.
D
e
a
t
h
s
.
2015
‘
,
1
,
l
e
n
g
t
h
−
5
)
d
a
1
`U5MR.1950:Neonatal.Deaths.2015`,1,length-5) da1
‘U5MR.1950:Neonatal.Deaths.2015‘,1,length−5)da1year <- substr(da1$U5MR.1950:Neonatal.Deaths.2015
,length-3,length)
da2 <- na.omit(da1)
da3 <- da2[,-2]