《R for beginners》| R语言基本数据操作

写在前面:

本文上接上一篇博文,是Emmanuel Paradis《R for beginners》的笔记、部分翻译和实践代码的整理,部分例子有所修改。虽然本书已经足够精简,但是便于查阅和复习,便有了该系列。
由于笔者之前对R有过简单了解和使用,部分内容有所精简。

Data with R

1. Objects

所有的对象有两个独有的属性:mode和length。类型和长度。有numeric, character, complex, logical四种基本数据类型。通过以下命令分别查看:

mode(a)
length(a)

此外Inf表示无限,NaN表示Not a number, NA表示Not available。
声明字符串后,转义字符\会直接显示出来,那么如何真正进行转义呢?

x <- 'Double quote " delimitate R\'s strings.'
cat(x)

Table 1
上表是几种基本对象可定义的数据类型,以及是否不同的数据类型可以存在于同一对象中。可见只有data frame 和list可以。

2. Reading data in a file

读取数据时设置工作路径work directory是很方便的。

getwd() # get concurrent wd
setwd() # set wd

读取数据方法很多。可用read.table,读取大部分表格数据,尤其是.dat。当然当你打出read.之后,会有很多读取的提示。还可设置其他参数。常用:
read,fwf()表示以固定宽度分割。类似excel里分列操作。

read.table()
read.csv()
read.fwf(file,widths = c(1,2,2))

scan()函数可用其参数what控制读入数据的类型。
如果data.dat是有3变量,那么" "表示character, 0 表示numeric类型。

mydata <- scan("data.dat",what = list("",0,0))
3. Saving data

存储到硬盘:

write.table(x,file = "") # x is object name, file is the file dir and name. 
4.Generating data

4.1 general sequences
创建一般序列:

x <- 1:30
y <- seq(1,5,0.5) # 1-5, o.5 as a step 
z <- seq(length = 10, from = 1, to = 5)
ii <- c(1,2,3,4)
z <- scan() # user's input
rep(1,30) # generate repetable seq, that is 30 ones
seqence(4:5) # ans: 1 2 3 4 1 2 3 4 5
seqence(2,4) # ans: 1 2 1 2 3 4  

创建level:
level有点类似seq。可以通过参数length控制长度。配合label,factor食用效果更佳。


gl(2,3,length = 6) # ans: 1 1 1 2 2 2 
gl(2,3,label = c("MALE","FEMAL")

vector, factor组合形成data frame:

expand.grid(h = c(1,2,3), w = c(100,80,90), sex = c("Male","Femal")

运行结果来看,行数为元素个数n的列数c次方,n^c。具体用处暂时没体会到,过。

4.2 Random sequences

这个对于概统一些模拟比较有用。
下表是一些分布和生成其随机序列的函数,基本是r+分布简称。
Table 2
外推一下,r可以被d,p,q替代。d表示probability density概率密度,p表示累积概率密度cumulative probabilty density,q表示百分数quantile。

5. Manipulating object

5.1 Creating objects

对象名称及其属性的表格见本章第一节,本章进行实操。
(1)Vector
(2)factor
factor不仅包括类型数据,还包括该变量可能的level。其参数labels, exclude较为有用,前者给数据贴上标签,后者删除数据,成为NA

factor(1:3, label = c("Good","Fair","Bad"))
factor(1:3,exclude = 2)

(3)Matrix
byrow参数设置数据是否充满列(FALSE),充满行(TRUE)


matrix(data = ,nrow = , ncol = ,byrow = FALSE)

(5)Data frame


x = 1:4, y = 2:5
data.frame(x,y) # input params. are columns and names

(6)List
类似dataframe。不同点在于列名不会自动获取,需要赋值,需要用names()函数获取,每个元素长度不一定同。

x <- 1:2; y <- 2:5
A <- list(x,y)
B <- list(X = x, Y = y)
names(A) # ans:NULL
names(B) # ans "X" "Y"

(7)Time series
比较有用的参数,start, fequency(12表示月份,4表示季度)

ts(data = 1:10 ,start = 1950)
ts(1:47, fequency = 12,start = c(1950,2))

(8)Expression
expression的最大作用在于把一个表达式不求值,纯表达式,便于进行求导等操作。可用eval()函数评估其结果是否可得。

exp <- expression(x/(y+exp(z))
D(exp,"x") # get x deviation of exp 

5.2 Converting objects

对象主要用到as.+要转换到的类型。下表归纳了函数及其转换规则:
Table 3

5.3 Operators

下表分类列出了R中的操作运算符:
在这里插入图片描述
需要注意Logical operators里的AND OR 比较,1个&或|,每个元素互相比较;2个时,只比较对象的第一个元素,返回TURE FALSE。

identical(0.9,1-0.1)
all.equal(0.9,1.1-0.2, torlerance = 1e-10)

除了用运算符,还可以用函数。上下两行分别是进行严格比较和近似比较的函数。

5.4 Accessing the values of an object: the indexing system

本节使用Index获取对象中的值。非常有用。
R中索引使用方括号[ ],不用:。索引可以是数字,也可以是向量。索引还可以是-1,表示导数第一行。


x <- matrix(1:10,nr = 2, nc = 5); x[,3]

注意:对于list来说,双[[ ]]得到的是值,而[ ]得到的是对象。

5.5 Accessing the value of an object with names

使用名字获取变量。
使用names()函数命名、获取变量名。亲测只能命名所有值。

x <- 1:3; names(x); names(x) <- c("a","b","c")

对于Matrix, dataframe,使用rownames(),colnames()

x <- matrix(1:4,2);rownames(x) <- c("a","b"); colnames(x) <- c("c","d")
dimnames(x) # get a list with all names 

对于数组array, 使用dimnames()

A = array(1:8,dim = c(2,2,2); A
dimnames(A) <- list(c("a","b"),c("c","d"),c("e","f"))

当然一般数据都都有列名,因此直接用名字作为索引即可获取数据。

df["Year"]

从data frame得到vector, factor,使用$符号,名称不用加" ":

df$Year

5.6 The data editor

X <- matrix(1:10)
fix(X)
data.entry(X)

5.7 Arithmetics and simple functions

注意:长短不同的矢量也可相加,短的将自动循环。
在这里插入图片描述
其它使用简单函数

sample(x,size) # resample randomly

还有很多,见原著P32-33。

5.8 Matrix computation

矩阵合并,合并行rbind,合并列cbind. diag()得到对角矩阵。
转置矩阵solve()

参考文献

Paradis E. R for Beginners[J]. 2002.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值