美文网首页
【R语言基础五:数据管理】

【R语言基础五:数据管理】

作者: lkj666 | 来源:发表于2021-02-15 18:35 被阅读0次

2021.4.22
持续更新中。。。


《R语言实战2》、学术数据分析及可视化


1. 取子集

1.1 针对向量

set.seed(999)
df1 <- floor(runif(10, 1, 101))
#利用[]进行提取
df1[c(1:5)]
df1[which(df1 > 50)]

which()返回向量中符合条件元素的位置信息。

1.2 针对数据集

pneumonia_data <- read.table('pneumonia_en.txt', header =T)
#利用"文件名称+$"提取数据框中某一列,或某一列中的某些元素
pneumonia_data$case
pneumonia_data$case[1:10]

#利用subset提取数据框中,符合某一条件的所有的内容
subset(pneumonia_data, increase > 1000, select = c(data, case))

subset()按照某一列的条件取数据框子集后,可通过select选项选择需要保留的其他列,默认全部保留。(支持负索引)




2. 直接生成新的数据集

2.1 生成随机抽样样本

  • sample():用于从数据集中(有放回或无放回)抽取大小为size的一个随机样本。例如:
sample(x, size, replace = FALSE)
  • runif():生成随机数,默认情况下是生成均匀分布的随机数。例如:
 # 生成10个1-100之间的随机数,并保留一位小数
round(runif(10,min=1,max=100), digits=1)
  • rnorm:生成正态分布的随机数
  1. 常用set.seed(999)来固定生成的随机数
  2. round(x,digits=n):保留x的小数位数
  3. options(digits=n):可以在最开始的位置,设置全局小数保留的位数

2.2 生成等差数列

# 生成from到to,等差为by的数列
seq(from, to, by) 

重要参数:

  1. from:生成向量的起点
  2. to:生成向量的终点
  3. by:序列的增量,默认为1
  4. length.out:输出长度

2.3 重复生成

rep(x, times = a, each = c, length.out = d)

重要参数:

  1. x:可以是单个数字或向量
  2. times:整个数组循环几遍
  3. each:每个元素重复次数
  4. length.out:输出长度



3. 数据操作

3.1 行列操作

  • 查看行名和列名
rownames(mtcars)
colnames(mtcars)
  • 在矩阵后添加行/列
dfx <- c(1,3,10,16,33,70,150)
dfy <- c(5,5,18,20,45,90,200)
df <- data.frame(dfx, dfy)
#求每行的和
apply(df,1,sum)
#将求得的和追加到数据框df后面
df$sum1 <- apply(df, 1, sum)
#修改表头
rownames(df) <- c('dfx', 'dfy', 'rowsum')
  • 给矩阵增加表头和列名
x <- matrix(1:12, nrow=3, byrow=T) 
rownames(x) <- LETTERS[1:3] #大写字母ABC作为行名
colnames(x) <- c("x", "Y", "doc", "Bear") #列名填充
rownames(x) #查看行名

3.2 合并数据

#横向合并
total <- cbind(A, B)
#列向合并
total <- cbind(A, B)

3.3 行列转置

t(A)

3.4 将函数应用到矩阵或数据框

    通过R对象的函数应用是针对所有元素进行的(例如:对矩阵直接用mean等函数是求矩阵所有元素总和的平均值),如果需要针对行/列进行处理,需要用到以下函数:

apply(x, margin, fun,..) # 对行或列进行函数fun的运算。

重要参数:
margin:为1时表示行,为2时表示列。

3.5 长宽数据转换

重要概念:

  • 二维数据集中,行表示观测,列表示变量。
  • 宽数据:数据集对所有的变量进行了明确的细分,各变量的值不存在重复循环的情况也无法归类。表现为变量多而观察值少,即行少列多。
  • 长数据:数据集中的变量没有做明确的细分,即变量中至少有一个变量中的元素存在值严重重复循环的情况(可以归为几类)。表现为变量少而观察值多,即行多列少。
  • 实验数据通常保存为宽数据,形如:
试验方式 重复1 重复2 重复3
处理1 1.5 1.8 1.9
处理2 2.5 2.2 2.0
处理3 3.2 3.0 3.3

1.1 宽数据变长数据

library(gcookbook)
library(reshape2)

anthoming
melt(anthoming, id.vars = "angle", variable.name = "condition", value.name = "count")

reshape2包中的melt()函数主要参数:

  1. data:需要转换的数据集
  2. id.vars:不需要进行重新排列的列名,通常会随着melt不停重复堆叠,因此最好是无数学意义整数(变量位置信息)或字符串(名称信息)。若数据集不具备标识变量,可以在melt前使用data$ID <- rownames(data)给数据框增加一列标识变量。
  3. variable.name:melt 后观测变量的列名 ,填默认为 variable
  4. value.name:melt 后观测值的列名, 默认为 value

1.2 长数据变宽数据

library(gcookbook)
library(reshape2)

plum
data <- dcast(plum, length + time ~ survival, value.var = "count")
#保存文件到本地
write.csv(data, file = "file_name")

reshape2包中的dcast()函数主要参数:

  1. data:需要转换的数据集
  2. a ~ b:波浪线左侧表示标识变量(留下来的列),右侧表示可变变量(会转换成新的列变量,就是那些重复的变量)。左右侧均可是多个变量。
  3. value.var:相应的数值列。

1.3 一个更加方便的包和函数

install.packages("tidyr")
library(tidyr)

#宽数据转换为长数据
gather(Ndata, 重复, 生物量, -N)
#长格式转换成宽格式
spread(df1, 重复,生物量)

gather()函数关键参数:

  1. Ndata:需要转换的宽数据名
  2. 重复:设置转换后会堆叠的变量名,一般就是将表头重复堆叠之后,给与这些堆叠的数据一个名称
  3. 生物量:设置新生成的观测值变量名,就是那些数值数据变形后的变量
  4. -N:标识变量名,不变的列

gather()函数关键参数:

  1. df1:需要转换的长数据名
  2. 重复:转换后会分散的变量名,一般转换后会形成表头
  3. 生物量:观测值变量名



4. 处理缺失值

  • df1<- na.omit(df):删除含有NA的行
  • df[is.na(df)] <- 0:用0替换NA
  • 通过趋势预测来插补缺失值(用平均值)
---情况一:剩余数值波动不大时,可用平均值填补---
df$rate[is.na(df$rate)] <- mean(df$rate, na.rm = T)

---情况二:存在波动时,利用函数关系进行插补---

---情况三:利用回归函数进行插补---

数据拟合不理想的解决思路:

  1. 选择其他模型进行重新拟合
  2. 重新选择部分数据进行拟合

相关文章

网友评论

      本文标题:【R语言基础五:数据管理】

      本文链接:https://www.haomeiwen.com/subject/xmcotltx.html