导图社区 数据录入
数据录入是指把经过编码后的数据和实际数字通过录入设备记载到存贮介质上,以备电子计算机操作时调用。本图总结了相关知识。
编辑于2022-06-09 22:33:58数据录入
超基础操作
移除变量
rm()
之前定义过的变量将会变得没有定义
空格
增加代码的人脑可读性
可以在+,<-, 或逗号(,)的任意一边加空格
换行
只要在第一行结束时使用反斜线或逗号,换行后R都能识别出下一行和之上的是一条命令
显示变量的定义
只应用于定义过的变量
直接输入变量名按回车
对于含超过1个值的变量
查看第一个值
变量名后边加[1]
查看前五个值
变量名后加[1:5]
查看除了第二个值的其它值
变量后加[-2]
函数:定义
变量名
最好用大写字母开头
避免其和内部函数名混淆,大部分内部函数不是以大写开头的
确定自己的变量名不是一个已经存在的内部函数
用?自己想要的名字查询是否存在帮助
<-或=
可将任意符号定义成变量,即将变量映射为数值或多项式; 定义完成后,该符号在之后的代码中则永远代表该意义
左边是被定义的符号,右边是定义内容
Wing-1 <- 59
SQ. wing1 <- sqrt (wing1)
其实这个是一种最基本的储存
将这种放在圆括号内R会立刻计算出它的值
想要查看计算结果可以直接输入变量名按回车
基础操作
函数:连接(concatenate)
c的广义
任何一个小括号里超过一个值,都要用c函数把它弄成个向量,否则就错的
c()
只有圆括号
功能是创造一个向量,连接其括号内的值或变量
定义一个向量
长度
单元的个数
单元的顺序
用于将一个变量映射为多个值
Wingcrd <- c(59, 55, 53.5, 55, 52.5, 52.5, 57.5, 53, 55)
将一个变量映射为多个变量
这些变量必须是已经定义过的,否则就要加上引号””,以表示其就是一个名称而不是变量
BirdData <- c(wingcrd, Tarsus, Head, Wt)
再次查看时会出现
> BirdData [1] 59.0 55.0 53.5 55.0 52.5 57.5 53.0 55.0 22.3 19.7 20.8 20.3 20.8 21.5 [15] 20.6 21.5 31.2 30.4 30.6 30.3 30.3 30.3 30.8 32.5 NA 9.5 13.8 14.8 [29] 15.2 15.5 15.6 15.6 15.7
[1], [15], [29] 是换行时出现的索引编号,其代表新换一行的第一个值,所以切换显示器屏幕大小而改变行的话会改变这些编号
但查看时并没有区分哪些值属于哪个变量
更好的整理和查看方法
1. 添加一个索引变量, 识别这组观察值的向量
Id <- c(1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4)
简化该过程的函数
Id<- rep(c(1,2,3,4), each = 8)
或更简单的 Id<- rep(1 : 4, each = 8)
1:4就是一到四
>1:4回车会看到1,2,3,4
相似的还有函数seq
a <- seq(from = 1, to = 4, by = 1)
rep(a, each = 8)
可以用真实的名称做索引,但记得加上引号
>VarNames <- c("wingcrd", "Tarsus", "Head", "Wt")
>Id2 <- rep (VarNames, each=8)
有each=
[1] "wingcrd" "wingcrd" "wingcrd" "wingcrd" "wingcrd" "wingcrd" "wingcrd" "wingcrd" "Tarsus" "Tarsus"
[11] "Tarsus" "Tarsus" "Tarsus" "Tarsus" "Tarsus" "Tarsus" "Head" "Head" "Head" "Head"
[21] "Head" "Head" "Head" "Head" "Wt" "Wt" "Wt" "Wt" "Wt" "Wt"
[31] "Wt" "Wt"
即是把旧向量中每个元素在原位扩增了8被
没有each=
[1] "wingcrd" "Tarsus" "Head" "Wt" "wingcrd" "Tarsus" "Head" "Wt" "wingcrd" "Tarsus" "Head" "Wt" "wingcrd"
[14] "Tarsus" "Head" "Wt" "wingcrd" "Tarsus" "Head" "Wt" "wingcrd" "Tarsus" "Head" "Wt" "wingcrd" "Tarsus"
[27] "Head" "Wt" "wingcrd" "Tarsus" "Head" "Wt"
其实是复制了8次原向量,并且并列了
2. 用cbind函数查看
cbind 可以把输入其的向量变量按顺序排成列,生成一个更长的向量,并未真正转化为矩阵
> Z <- cbind(Wingcrd, Tarsus, Head, Wt)
> Z
Wingcrd Tarsus Head Wt
[1,] 59.0 22.3 31.2 9.5
[2,] 55.0 19.7 30.4 13.8
[3,] 53.5 20.8 30.6 14.8
[4,] 55.0 20.3 30.3 15.2
[5,] 52.5 20.8 30.3 15.5
[6,] 57.5 21.5 30.3 15.6
[7,] 53.0 20.6 30.8 15.6
[8,] 55.0 21.5 32.5 15.7
[9,] 59.0 22.3 NA 9.5
要提取第一列的数据...
Z[, 1]
Z[1 : 8, 1]
提取第二行的数据
Z[2, ]
Z[2, 1 : 4]
可以定位到具体一个数据(第一行第一列)
Z[1, 1]
可以直接赋予该提取式一个定义
D <- Z[, c(1, 3, 4)]
E <- Z[, c(-1, -3)]
但保证你输入的这些数没有超出行和列的最大数量(维数)
确定”维数“
dim(Z)
会生成一个二元素向量
第一个是行数
第二个是列数
仅仅存储行数
nrow <- dim(Z) [1]
nrow()
仅仅存储列数
ncol()
rbind函数
把输入起的变量按顺序排成行
cbind 的 alternative
用内置函数来操控这种连接多值的变量
sum(Wingcrd)
或 S.win <- sum(wingcrd)
若一个数据没得到?
用NA表示
需注意要再用na.rm=TRUE
改变na. rm=FALSE
有时代表缺失值的将是na. action
为了确定该函数是如何处理缺失值,需要输入?函数名查看具体
否则很多函数将无法计算含NA的表
函数:vector
创造一个向量,和concatenate功能一样,但在vector中需要你首先定义长度。然后写出每个长度单元的值
必须给出所有值才能生成一个有效变量变量
concatenate其实简化了这一步,你括号后的值的数量就代表了向量的长度
所以是不是很蛋疼
但在做循环运算时长度需要被具体定义
例子
> W <- vector(length=8)
> W[1] <- 59
> W[2] <- 55
> W[3] <- 53.5
> W[4] <- 55
> W[5] <- 52.5
> W[6] <- 57.5
> W[7] <- 53
> W[8] <- 55
> W
[1] 59.0 55.0 53.5 55.0 52.5 57.5 53.0 55.0
查看:和查看所有向量变量一样
在变量后打中括号再回车就能查看你想要的长度位置
中括号可以说帮助定义了向量的长度位置
函数: matrix
和vector一样,结果类似于用cbind处理c过/vector过的变量(向量)
matrix 需要首先定义矩阵的行数列数,即大小...
然后在把每行每列依次输入进去
也可以一个一个格的输入
Dmat[1,1] <-59.0
例子
> Dmat <- matrix(nrow = 8, ncol = 4)
> Dmat[, 1] <- c(59, 55, 53.5, 55, 52.5, 57.5, 53, 55)
> Dmat[, 2] <- c(22.3, 19.7, 20.8, 20.3, 20.8, 21.5, 20.6, 21.5)
> Dmat[, 3] <- c(31.2, 30.4, 30.6, 30.3, 30.3, 30.8, 32.5, NA)
> Dmat[, 4] <- c(9.5, 13.8, 14.8, 15.2, 15.5, 15.6, 15.6, 15.7)
> Dmat
[,1] [,2] [,3] [,4]
[1,] 59.0 22.3 31.2 9.5
[2,] 55.0 19.7 30.4 13.8
[3,] 53.5 20.8 30.6 14.8
[4,] 55.0 20.3 30.3 15.2
[5,] 52.5 20.8 30.3 15.5
[6,] 57.5 21.5 30.8 15.6
[7,] 53.0 20.6 32.5 15.6
[8,] 55.0 21.5 NA 15.7
matrix生成的矩阵相较cbind没有列标签
给列加上名称
colnames()
colnames(Dmat) <- ("wingcrd", "Tarsus", "Head", "Wt")
给行加上名称
rownames()
把cbind函数生成的结果转化为矩阵(很多程序的输入需要矩阵格式)
用as.matrix函数
其把不是矩阵的cbind转化为矩阵
Dmat <- as.matrix(cbind(Wingcrd, Tarsus, Head, Wt))
类似的还有
is. matrix
它们的函数输入若是矩阵则会产生错误
当然还有
as.data.frame
is.data.frame
回答是TRUE则是表不是数据框...
回答是FALSE则是
这两个函数也有相同功能
函数:data. frame 数据框
最像excel...
功能
将输入的向量结合为数据框
按列组合
其不影响原始数据
因为它是重新生成了一组新的变量,代替之前c出的变量,来展示数据
这将使我们能趁机修改原始数据
如加入了一个新的Wsq列
因为是新生成的变量,即使之前的变量改变也不会对产生的值有影响
数据框还可结合数值变量,字符串和因子
所以它的功能是不可或缺的
Dfrm <- data.frame(WC = Wingcrd, TS=Tarsus, HD= Head, W=Wt, Wsq=sqrt(Wt))
其每行包含同一样本的不同观察值
函数:list
其将一些格式不同的变量按行排成列
其每一行只代表一个单元, 不一定相同的格式
可以方便于在数据上使用很多其它函数, 提供存储选择的多样性
list 函数小括号里只能用 =, 不能用<-
演示
> x1 <- c(1, 2, 3)
> x2 <- c("a","b","c","d")
> x3 <- 3
> x4 <- matrix(nrow = 2, ncol = 2)
> x4[, 1] <- c(1, 2)
> x4[, 2] <- c(3, 4)
> Y <- list(x1 = x1, x2 = x2, x3 = x3, x4 = x4)
> Y
$x1
[1] 1 2 3
$x2
[1] "a" "b" "c" "d"
$x3
[1] 3
$x4
[,1] [,2]
[1,] 1 3
[2,] 2 4
这种函数在一些统计函数的输出中较常见
M<- lm(WC ~ W, data = Dfrm)
这是一个求线性回归方程的函数
因为生产的结果不全是相同格式,所以提取列表不同的信息要
M$coefficient
只查看系数
M$residuals
只查看residuals
大型数据载入
Excel
在处理大型数据时,excel表现不佳,因为其列数有限制
第一种
1. 准备好Excel中的数据
样本-变量形式
确定列表示各种变量
行表示各种样本单元
样本
观察值
案例
对象
以NA(大写)表示缺失值
最好以excel中第一列来识别样本单元,第一行作为变量名
名称的格式
避免出现有符号的名称
避免出现有空格的名称(字段或数值)
使用简单的名称
2. 提取数据到ascii文件--文本文件(制表符分隔)
该格式下数据被制表符分隔
这个格式不能有空格和空内容!数值和名称都是
建议保存一个简单的文件名,否则写代码很容易出错
和简单的目录名(RBook)
3. 关闭Excel
4. 使用read.table函数将数据载入到R
小数点
read.table 默认是以.做小数点
若ascii中以逗号做小数点,则需
Squid <- read.table(file = "C:/RBook/squid.txt", header = TRUE, dec = ",")
对于一些奇葩电脑本身以逗号做小数点则需
Squid <- read.table(file = "C:/RBook/squid.txt", header = TRUE, dec = ".")
否则R会把数值做分量载入
Squid <- read.table(file = "C:\\RBook\\squid.txt", header = TRUE)
这个地址可以在文件属性中查看
但windows要多加一个/
或Squid <- read.table(file = "C:/RBook/squid.txt", header = TRUE)
header = TRUE 表示第一行包括了标题
这个标题不算在数据框真正的第一行...
而是一堆变量名...
若文件中没有标签可改为 header = FALSE
read. table函数可以有非常多的选项
数据字段中有空格
strip.white = TRUE
setwd函数
在同一工作目录多次提取文件,用其可省略read.table函数中的目录路径
setwd("C:\\RBook\\")
Squid <- read.table(file = "squid.txt", header = TRUE)
Scan函数
read.table 把数据储存于数据框中
scan 把数据储存于矩阵中
其对大量数据的运算更加迅速
(数百万个以上)
但前提是数据必须都是数值
所以不需要什么header = TRUE
所以也不需要那些header标题,你可能要添加些索引变量
需要注意:excel中不要有注释的列,这样会生成一整列NA
第二种
使用专门程序包RODBC访问excel中选定的行和列
基础操作
结合数值,字符串,变量的方法
c()
将括号内的东西按顺序结合为一个向量
输入
整数,数值,向量,矩阵,数据框,字符串,变量
数值变量,字符串
输出
向量
即list
按照一定顺序排列的一系列单元
cbind()
将输入的多个单元按输入顺序排成列,生成一个“便于查看的”向量
输入
整数,数值,向量,矩阵,数据框,字符串,变量
或数值变量,字符串
输出
向量
但其有2维,可以用[,]选定
列标签
最上面带有输入时的变量名作为“标签”
其不参与任何计算,只是便于查看而已
有一个默认现象...
若输入的那个元素没达到维数,那就自动补充其自己到那么多
见最右那个一
rbind()
将输入的多个单元按输入顺序排成行,生成一个“便于查看的”向量
其它都跟cbind相同
按变量名输出行标签
vector()
功能和c一样,但更严谨和死板
输入
先输入一个整数定义长度
再输入每个位置的值
输出
向量
matrix()
创建一个具体的矩阵
输入
维数
数值变量
输出
矩阵
例子
例子
> Dmat <- matrix(nrow = 8, ncol = 4)
> Dmat[, 1] <- c(59, 55, 53.5, 55, 52.5, 57.5, 53, 55)
> Dmat[, 2] <- c(22.3, 19.7, 20.8, 20.3, 20.8, 21.5, 20.6, 21.5)
> Dmat[, 3] <- c(31.2, 30.4, 30.6, 30.3, 30.3, 30.8, 32.5, NA)
> Dmat[, 4] <- c(9.5, 13.8, 14.8, 15.2, 15.5, 15.6, 15.6, 15.7)
> Dmat
[,1] [,2] [,3] [,4]
[1,] 59.0 22.3 31.2 9.5
[2,] 55.0 19.7 30.4 13.8
[3,] 53.5 20.8 30.6 14.8
[4,] 55.0 20.3 30.3 15.2
[5,] 52.5 20.8 30.3 15.5
[6,] 57.5 21.5 30.8 15.6
[7,] 53.0 20.6 32.5 15.6
[8,] 55.0 21.5 NA 15.7
加标签
给列加上名称
colnames()
colnames(Dmat) <- ("wingcrd", "Tarsus", "Head", "Wt")
给行加上名称
rownames()
data.frame()
将输入的单元按列排列,生成一个数据框
输入
数值变量,字符串,因子
输出
数据框
数据框会独立其输入变量外生成一组全新备份变量
其实际名称为------数据框变量名$子变量名
所以变量名不和直接注册的变量名冲突
列标签
变量名会按顺序作为列标签
list()
将输入的单元按行排列,生成一个数据列
输入
数值变量,字符串,因子
例子
> x1 <- c(1, 2, 3)
> x2 <- c("a","b","c","d")
> x3 <- 3
> x4 <- matrix(nrow = 2, ncol = 2)
> x4[, 1] <- c(1, 2)
> x4[, 2] <- c(3, 4)
> Y <- list(x1 = x1, x2 = x2, x3 = x3, x4 = x4)
> Y
$x1
[1] 1 2 3
$x2
[1] "a" "b" "c" "d"
$x3
[1] 3
$x4
[,1] [,2]
[1,] 1 3
[2,] 2 4
输出
数据列
数据列中的每一项不必有相同格式
行标签
输入的变量名
几种格式中的转化
as. matrix
输入
数据框
cbind生成的向量
输出
矩阵
as. dataframe
输入
数据框
cbind生成的向量
输出
数据框
几种格式的查看
is. matrix
输出若是TRUE则不是矩阵
输出若是FALSE则是
is. dataframe
输出若是TRUE则不是数据框
输出若是FALSE则是
给矩阵和数据框修改和添加标签
加列标签
colnames()
colnames(Dmat) <- ("wingcrd", "Tarsus", "Head", "Wt")
加行标签
rownames()
给向量添加标签
names()
直接输入一个同样长度的向量即可
选定矩阵,向量,数据框中具体的位置[]
向量中的具体位置
需要一个值来确定
[a]
cbind生成的向量是例外需要两个值定位
数据框&矩阵中的具体位置
需要两个值来确定它
[a,b]
若省略一边则表示所有行或列
转置一个有两个维的cbind,数据框,或矩阵
t()
列变成行,行变成列
其实只要是都是纯数字的cbind和数据框都可以输入到用矩阵做变量的函数
两种常见的数据存储格式
dataframe
数据框
R中大部分函数使用其工作
matrix
矩阵
其二者用is.matrix和is.dataframe来转换
小括号定义了“值”
可以是数值,可以是变量,还可以是纯名称,但若是名称需要加引号
所有的目录,文件名都需要加引号
小括号里可以有多个值
当定义c函数的值时,小括号里的数自动按其排列顺序排成了一个向量
中括号定义了“位置”
向量中的具体位置
需要一个值来确定
[a]
数据框&矩阵中的具体位置
需要两个值来确定它
[a,b]
若省略一边则表示所有行或列