标签:
Shiny
Slidify
RPubs
kaggle
通过做图让我们了解数据的属性和模式。
基于数据得出正式结论的过程。有不确定性和
线性回归分析,用历史数据拟合线性模型来预测未来趋势。预测变量:面积,位置,楼龄。结果变量:房价。考察结果变量和预测变量之间是否有线性关系。
训练模型+预测
R:cran.r-project.org
Rstudio:rstudio.com
Powerful IDE for R —> Desktop
CRAN/Bioconductor/GitHub
CRAN中:install.packages(“name”)
GitHub中:install_github(name)
R中自带的数据集:data()
输入:?数据集名称 就可以了数据详情了。
1)、c()无条件定义向量
例如:(x =c(10,16,18)) 在R语言中=和<–等效,最外面的()表示直接输出x的内容
2)、冒号操作符:定义以1为步长的等差数列
例如:(x=1:10) 定义了一个1到10的向量。最外面的()表示直接输出x的内容
3)、seq(from, to, by, length, along.with) from起点 to终点 by步长 length向量长度 along.with元素个数
例如:(x=seq(5,by=2,length=8))定义一个从5开始以2为步长有8个元素的向量。
(y=seq(10, by=3, along.with=x))定义一个从10开始的以3为步长的长度等于x长度(也就是8)的向量。along.with后面必须跟上另外一个向量。
4)、vector(“向量的数据类型”,length=长度)
> (x=vector("character",length = 10)) #创建一个有10个空值的向量
[1] "" "" "" "" "" "" "" "" "" ""
在R语言中,利用向量作为下标可以提取多个元素。
将鼠标放到一条要执行的语句上,再按contrl+enter就执行了。
PS:每一个元素的数据类型必须一样,因子应用于分类变量(数据),可以吧因子理解成整数向量+标签(labels)。因子中的分类变量的类型叫做因子的水平,是一个文字串。每个分类都有文本标签,所以因子也有文本标签。level是数字或者其他字母代表级别,level对应着labels,labels是具体的文本。
分类数据分为有序分类数据和无序分类数据
1)、利用factor()函数来构造因子
例子:
> (x=factor(c("a","b","o","ab","a","ab"))) #将这个向量转化成因子格式
[1] a b o ab a ab
Levels: a ab b o
> unclass(x) #去除属性影响
[1] 1 3 4 2 1 2
attr(,"levels")
[1] "a" "ab" "b" "o"
从输出可以看出level在内存中实际上是以数字进行存储的。默认label与数字的对应关系是和标签的内容在字典中的位置所决定的。所以’a’ ‘b’ ‘ab’ ‘o’ 分别对应1 2 3 4
使用levels可以自定义level对应关系:
#在levels=c()中,先后出现的是"a", "b", "o", "ab"也就对应1 2 3 4
(x=factor(c("a","b","o","ab","a","ab"),levels=c("a", "b", "o", "ab")))
unclass(x)
#输出
[1] a b o ab a ab
Levels: a b o ab
[1] 1 2 3 4 1 4
attr(,"levels")
[1] "a" "b" "o" "ab"
从输出可以看出通过我们的自定义,a依旧是对应1,但是b o ab的对应关系由3 4 2变成2 3 4,符合levels=c()中b o ab出现的次序。
2)、利用gl()函数来创建因子
#声明4个量,每个重复3次。
> (f2=gl(4,3,labels = c(‘blue‘,‘red‘,‘green‘,‘yellow‘)))
[1] blue blue blue red red red green green green yellow
[11] yellow yellow
Levels: blue red green yellow
#查看级别
> unclass(f2)
[1] 1 1 1 2 2 2 3 3 3 4 4 4
attr(,"levels")
[1] "blue" "red" "green" "yellow"
1)、用向量组成下标来提取
> (f2=gl(4,3,labels = c(‘blue‘,‘red‘,‘green‘,‘yellow‘)))
[1] blue blue blue red red red green green green yellow
[11] yellow yellow
> (f2[1:5])
[1] blue blue blue red red
Levels: blue red green yellow
> (f2[seq(5,by=1,length=3)])
[1] red red green
Levels: blue red green yellow
> (f2[-1:-5])
[1] red green green green yellow yellow yellow
Levels: blue red green yellow
2)、利用which来做条件选择提取
> (f2[which(f2==‘blue‘)])
[1] blue blue blue
Levels: blue red green yellow
> (f2[which(f2==‘red‘)])
[1] red red red
Levels: blue red green yellow
一个有行有列的二维结构,矩阵中每个元素的数据类型必须完全一样,要么都是字符串,要么都是整型,要么都是整形。
举例:
#1:6是一个1到6 的向量,将1到6这6个元素填充到之后申明的那个2*3的矩阵中,需要注意的是这里元素是默认一列一列进行填充的。
> (x=matrix(1:6,nrow=2,ncol=3))
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
#设置byrow=T修改填充方式为按行来填充
> (x=matrix(1:6,nrow=2,ncol=3,byrow=T))
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
举例:
> (x=1:18) #先生成一个向量
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
> dim(x)=c(3,6);x #再更改向量的dim属性,dim是数据的维度属性。将向量改成3*6的矩阵
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 4 7 10 13 16
[2,] 2 5 8 11 14 17
[3,] 3 6 9 12 15 18
举例:
(x=1:10)
(y=11:20)
(z=21:30)
> (m1=rbind(x,y,z)) #按行来生成矩阵 将x,y,z分别作为三行
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
x 1 2 3 4 5 6 7 8 9 10
y 11 12 13 14 15 16 17 18 19 20
z 21 22 23 24 25 26 27 28 29 30
> (m2=cbind(x,y,z))#按列来生成矩阵 将x,y,z分别作为三列
x y z
[1,] 1 11 21
[2,] 2 12 22
[3,] 3 13 23
[4,] 4 14 24
[5,] 5 15 25
[6,] 6 16 26
[7,] 7 17 27
[8,] 8 18 28
[9,] 9 19 29
[10,] 10 20 30
举例:
> x
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
> (x[2,3]) #访问2,3位置的元素,这里输出的是一个向量。
[1] 6
> x[2,3,drop=FALSE] #访问2,3位置的元素,设置drop=FALSE,输出的就是一个矩阵。
[,1]
[1,] 6
> (x[,2]) #访问第2列
[1] 2 5
> (x[2,]) #访问第2行
[1] 4 5 6
#矩阵的访问,在行和列这两维度上都是支持向量的。
> (x[,c(2,3)]) #访问第2,3列元素的信息
[,1] [,2]
[1,] 2 3
[2,] 5 6
> (x <- matrix(1:12,nrow = 4,byrow=T))
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 9
[4,] 10 11 12
> (x[c(2,3),] )#访问第2,3行元素的信息
[,1] [,2] [,3]
[1,] 4 5 6
[2,] 7 8 9
> (x[c(1,2),c(3,4)]) #提取第1,2行的第3,4列元素组成一个子矩阵。
[,1] [,2]
[1,] 3 4
[2,] 7 8
> x
v1 v2 v3
1 1 6 11
2 2 7 NA
3 3 8 13
4 4 9 NA
5 5 10 15
#x$v1>2、which(x$v1>2)、x[which(x$v1>2),]注层层递进的变化
> x$v1>2 #x$v1>2直接查看v1里面有哪些是大于2的,直接返回对应的TRUE或者FALSE。
[1] FALSE FALSE TRUE TRUE TRUE
> which(x$v1>2) #which(x$v1>2)返回的是v1中大于2的数据的下标
[1] 3 4 5
> x[which(x$v1>2),] #x[which(x$v1>2),]以矩阵形式将结果返回
v1 v2 v3
3 3 8 13
4 4 9 NA
5 5 10 15
> subset(x,v2>2) #使用subset函数
v1 v2 v3
1 1 6 11
2 2 7 NA
3 3 8 13
4 4 9 NA
5 5 10 15
举例:
> (x=matrix(1:24,ncol=6))
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 5 9 13 17 21
[2,] 2 6 10 14 18 22
[3,] 3 7 11 15 19 23
[4,] 4 8 12 16 20 24
> rownames(x) = c(‘R1‘,‘R2‘,‘R3‘,‘R4‘)
> colnames(x) = c(‘C1‘,‘C2‘,‘C3‘,‘C4‘,‘C5‘,‘C6‘)
> dimnames(x)=list(c(‘R1‘,‘R2‘,‘R3‘,‘R4‘),c(‘C1‘,‘C2‘,‘C3‘,‘C4‘,‘C5‘,‘C6‘))
> x
C1 C2 C3 C4 C5 C6
R1 1 5 9 13 17 21
R2 2 6 10 14 18 22
R3 3 7 11 15 19 23
R4 4 8 12 16 20 24
> x[‘R4‘,‘C6‘] #访问第4行的第6列
[1] 24
> x[c(‘R2‘,‘R3‘),c(‘C2‘,‘C3‘)] #访问第2,3行的第2,3列
C2 C3
R2 6 10
R3 7 11
> (x=matrix(1:20,nrow=5))
[,1] [,2] [,3] [,4]
[1,] 1 6 11 16
[2,] 2 7 12 17
[3,] 3 8 13 18
[4,] 4 9 14 19
[5,] 5 10 15 20
> dim(x)
[1] 5 4
向量运算和矩阵运算统一
1)、矩阵加数字,对应矩阵中每个元素加上相应的数字。
2)、相同规模的矩阵相加。
举例
> (m1=matrix(1:12,nrow = 3))
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
> (m2=matrix(13:24,nrow = 3))
[,1] [,2] [,3] [,4]
[1,] 13 16 19 22
[2,] 14 17 20 23
[3,] 15 18 21 24
> m1+10
[,1] [,2] [,3] [,4]
[1,] 11 14 17 20
[2,] 12 15 18 21
[3,] 13 16 19 22
> m1+m2
[,1] [,2] [,3] [,4]
[1,] 14 20 26 32
[2,] 16 22 28 34
[3,] 18 24 30 36
> m2-m1
[,1] [,2] [,3] [,4]
[1,] 12 12 12 12
[2,] 12 12 12 12
[3,] 12 12 12 12
(m1=matrix(1:12,n row=3,ncol=4))
(m2=matrix(13:24,n row=3,ncol=4))
(1)、数乘,矩阵乘以数字,也就是每个元素乘以相应的数字。
举例:m1*10
> m1*10
[,1] [,2] [,3] [,4]
[1,] 10 40 70 100
[2,] 20 50 80 110
[3,] 30 60 90 120
(2)、对应元素相乘(两个规模相同的矩阵的乘法运算),两个矩阵中对应元素相乘组成新的矩阵。这种乘法是R语言创造的,不是数学中的矩阵乘法。
举例:m1*m2
> m1*m2
[,1] [,2] [,3] [,4]
[1,] 13 64 133 220
[2,] 28 85 160 253
[3,] 45 108 189 288
(3)、矩阵乘法,记住“左行右列”,乘号左边的矩阵出第A行与乘号右边的矩阵出的第B列对应元素相乘的和,组成新的列表的第[A,B]号元素。矩阵乘法的条件是,左边的矩阵的列数等于右边矩阵的行数。例如:矩阵T乘以矩阵R,T是a*b的规模,R是c*d的规模,则T*R的条件是b=c。最后得到的新矩阵是a*d的新矩阵。这种乘法才是线性代数中的矩阵相乘。
举例:m1 %*% t(m2)
#数学上的矩阵相乘,要求左边的矩阵的列数等于右边矩阵的行数,而m1和m2都是3*4的矩阵,需要将m2转置成4*3才可以完成数学相乘,最终得到的是一个3*3的矩阵。
> m1 %*% t(m2)
[,1] [,2] [,3]
[1,] 430 452 474
[2,] 500 526 552
[3,] 570 600 630
单位矩阵:所有元素都是1,必须是方阵。必须是方阵。
对角矩阵:对角线上的元素都是1,其他位置的元素必须是0。必须是方阵。
举例:
#1
> diag(4)#生成4*4的对角矩阵
[,1] [,2] [,3] [,4]
[1,] 1 0 0 0
[2,] 0 1 0 0
[3,] 0 0 1 0
[4,] 0 0 0 1
#2
diag(c(1,2,3,4,5)) #生成对角线上是1,2,3,4的4*4对角矩阵
[,1] [,2] [,3] [,4] [,5]
[1,] 1 0 0 0 0
[2,] 0 2 0 0 0
[3,] 0 0 3 0 0
[4,] 0 0 0 4 0
[5,] 0 0 0 0 5
#3
> (a=matrix(1:16,4,4))
[,1] [,2] [,3] [,4]
[1,] 1 5 9 13
[2,] 2 6 10 14
[3,] 3 7 11 15
[4,] 4 8 12 16
> diag(a) #提取a矩阵上的对角元素
[1] 1 6 11 16
把行才换成列,把列换成行。(2,3)元素在转置之后变成了(3,2元素),用t()方法就可以了
举例
> (x=matrix(1:15,nrow=3))
[,1] [,2] [,3] [,4] [,5]
[1,] 1 4 7 10 13
[2,] 2 5 8 11 14
[3,] 3 6 9 12 15
> (t(x))
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 4 5 6
[3,] 7 8 9
[4,] 10 11 12
[5,] 13 14 15
举例:
> (x=matrix(rnorm(16,10,2),4,4)) #生成一个由16的随机数组成的4*4矩阵 rnorm(随机数个数,基准数字,偏移范围)
[,1] [,2] [,3] [,4]
[1,] 8.829662 8.570598 9.841040 9.944716
[2,] 8.097175 11.455700 8.370946 8.990764
[3,] 8.847266 10.421503 9.706328 7.751728
[4,] 7.471214 13.794859 10.761544 10.298522
> (y=solve(x)) #使用solve方法求逆
[,1] [,2] [,3] [,4]
[1,] -0.03594978 0.3024169 0.18049339 -0.36515764
[2,] -0.23173767 0.1736797 0.03126641 0.04861701
[3,] 0.07765014 -0.6111155 0.25961327 0.26311887
[4,] 0.25535134 0.1865548 -0.44410841 0.02193914
> x %*% y #互逆的两个矩阵,相乘是一个对角矩阵,由输出可见,对角线上的元素基本上都是1,其他位置的元素基本接近0。
[,1] [,2] [,3] [,4]
[1,] 1.000000e+00 6.661338e-16 -8.881784e-16 -3.053113e-16
[2,] 0.000000e+00 1.000000e+00 4.440892e-16 3.053113e-16
[3,] 2.220446e-16 6.661338e-16 1.000000e+00 -4.440892e-16
[4,] 4.440892e-16 6.661338e-16 8.881784e-16 1.000000e+00
(y=solve(x)) #使用solve方法求逆
举例:
> (x=matrix(rnorm(16,10,2),4,4))
[,1] [,2] [,3] [,4]
[1,] 9.375275 8.449186 9.742935 11.062033
[2,] 9.132176 12.227294 9.683535 6.924871
[3,] 9.988475 10.483249 11.765395 10.387113
[4,] 11.948738 11.510251 10.458448 12.582581
> (b = 1:4)
[1] 1 2 3 4
> solve(x,b)
[1] 11.784273 -6.028383 1.323694 -6.458354
实际上是求解
a11*x1+a12*x2+a13*x3+a14*x4 = 1
a21*x1+a22*x2+a23*x3+a24*x4 = 2
a31*x1+a32*x2+a33*x3+a34*x4 = 3
a41*x1+a42*x2+a43*x3+a44*x4 = 4
这个线性方程组的x1、x2、x3、x4的解。
举例
> (y1=matrix(1:6,nrow=2))
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> (y2=matrix(1:6,nrow=2))
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
> (y3=cbind(y1,y2)) #按列拼接
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 3 5 1 3 5
[2,] 2 4 6 2 4 6
> (y3=rbind(y1,y2)) #按行拼接
[,1] [,2] [,3]
[1,] 1 3 5
[2,] 2 4 6
[3,] 1 3 5
[4,] 2 4 6
数据框由记录和域组成,域就是列,记录就是行。数据框要求每一条域中的元素的数据类型必须一样。
数据框的本质就是一个二维的数据表
举例:
>(a=data.frame(fx=rnorm(10,10,2),
fy=runif(10,10,20),
fmonth=1:10)) #一个有10条记录3个域的数据框
fx fy fmonth
1 9.636283 11.33449 1
2 9.143942 15.93721 2
3 9.445728 10.29192 3
4 8.082495 11.27979 4
5 7.975052 16.61200 5
6 6.326113 15.15761 6
7 10.333080 18.70560 7
8 12.059794 18.09572 8
9 8.612815 17.04949 9
10 13.405404 18.68178 10
$、[]下标访问
举例:
> a[1,1] #访问第一条记录的第一个域
[1] 9.636283
> a[1,] #访问第一条记录的所有域
fx fy fmonth
1 9.636283 11.33449 1
> a[,2] #访问所有巨记录的第二个域
[1] 11.33449 15.93721 10.29192 11.27979 16.61200 15.15761 18.70560 18.09572 17.04949
[10] 18.68178
> (y3=a$fx) #访问数据框的fx数据域,双中括号也有想推开那个的效果
[1] 9.636283 9.143942 9.445728 8.082495 7.975052 6.326113 10.333080 12.059794
[9] 8.612815 13.405404
> (y3 = a [[1]]) #访问数据框的第一个域,也就是fx数据域
[1] 9.636283 9.143942 9.445728 8.082495 7.975052 6.326113 10.333080 12.059794
[9] 8.612815 13.405404
#注意对比以下三个a[[1]]和a[[‘fx‘]]、a$fx
> (y3 = a [[1]][2]) #访问第二条记录的第一个数据域,等价于(y3=a [[‘fx‘]][2])
[1] 9.143942
> (y3 = a[[‘fx‘]][2])
[1] 9.143942
> (y3= a$fx[2])
[1] 9.143942
> (x=data.frame(v1=1:5,v2=6:10,v3=11:15))
v1 v2 v3
1 1 6 11
2 2 7 12
3 3 8 13
4 4 9 14
5 5 10 15
> x$v3[c(2,4)]=NA #设置缺省值
> x
v1 v2 v3
1 1 6 11
2 2 7 NA
3 3 8 13
4 4 9 NA
5 5 10 15
> x[(x$v1<4 & x$v2>=8),] #添加筛选条件
v1 v2 v3
3 3 8 13
> x[(x$v1<4 | x$v2>=8),]
v1 v2 v3
1 1 6 11
2 2 7 NA
3 3 8 13
4 4 9 NA
5 5 10 15
挂载和去挂载方法
举例:
> fx #a没有在搜索路径,输入域名fx,不能找到fx
Error: object ‘fx‘ not found
> attach(a)
> search() #查看搜索路径,a已经被添加到了搜索路径。不用像之前y3=a $fx这样每次都指明搜索路径了。
[1] ".GlobalEnv" "a" "tools:rstudio" "package:stats"
[5] "package:graphics" "package:grDevices" "package:utils" "package:datasets"
[9] "package:methods" "Autoloads" "package:base"
> fx #这时再搜索fx,就能找到这个域了
[1] 1 2 3 4 5 6 7 8 9 10
> detach(a) #去挂载a
> search() #查看搜索路径,a已经从搜索路径中移除了。
[1] ".GlobalEnv" "tools:rstudio" "package:stats" "package:graphics"
[5] "package:grDevices" "package:utils" "package:datasets" "package:methods"
[9] "Autoloads" "package:base"
> fx #再搜索fx就找不到了
Error: object ‘fx‘ not found
with方法能用来重写数据框的元素,先全部清除再重新写入。within 可以向数据框里写入新的数据或者覆盖原数据
举例:
> (a=data.frame(fx=rnorm(10,10,2),
+ fy=runif(10,10,20),
+ fmonth=1:10)) #一个有10条记录3个域的数据框
fx fy fmonth
1 13.443635 10.06230 1
2 13.006166 12.27293 2
3 6.094351 12.29516 3
4 13.028642 10.65463 4
5 9.751618 16.13500 5
6 9.185354 12.75577 6
7 10.998482 19.68448 7
8 8.311340 19.97293 8
9 9.832441 15.79029 9
10 12.850348 10.49540 10
> a = with(a,{fx = rnorm (10,10,20)})
> a #a = with(a,{fx = rnorm (10,10,20)})执行之后原来的数据被清除,只有fx = rnorm (10,10,20)在里面。
[1] 22.891675 -21.576549 27.226358 -10.035888 -29.819505 29.220687 38.918151
[8] 21.573663 7.863019 2.488882
> a
fx fy fmonth
1 9.822649 11.83050 1
2 9.385922 15.01415 2
3 11.001721 19.85722 3
4 13.204639 13.34855 4
5 9.310447 15.04144 5
6 8.065048 12.83656 6
7 12.037258 10.62446 7
8 8.942234 10.14267 8
9 13.324897 14.67673 9
10 12.710792 11.68848 10
> a = within(a ,{ #使用within,数据框原来的数据是不会全部清除的。
+ fx=1:10 #修改fx由随机数变成1:10
+ abc=2:11 #添加abc这个域
+ })
> a
fx fy fmonth abc
1 1 11.83050 1 2
2 2 15.01415 2 3
3 3 19.85722 3 4
4 4 13.34855 4 5
5 5 15.04144 5 6
6 6 12.83656 6 7
7 7 10.62446 7 8
8 8 10.14267 8 9
9 9 14.67673 9 10
10 10 11.68848 10 11
> a\$fz = a\$fx + a\$fy #新增一个数据域,为fx和fy的和,可以直接使用$符来添加数据域
> a
fx fy fmonth abc fz
1 1 11.83050 1 2 12.83050
2 2 15.01415 2 3 17.01415
3 3 19.85722 3 4 22.85722
4 4 13.34855 4 5 17.34855
5 5 15.04144 5 6 20.04144
6 6 12.83656 6 7 18.83656
7 7 10.62446 7 8 17.62446
8 8 10.14267 8 9 18.14267
9 9 14.67673 9 10 23.67673
10 10 11.68848 10 11 21.68848
subset是一个条件过滤的语句
举例:
#fx>1&fmonth==8表示将符合条件的行记录(行)取出来,select=c(fx,fb,fz)表示将这些行记录的fx和fb、fz域(列)取出来。
> b = subset(a, fx>1&fmonth==8,select=c(fx,fb,fz))
> b
fx fb fz
8 8 163.284 18.14267
b = edit(a) edit是Rstudio的一个可视化工具,将a修改之后的数据存到b里面。
fix(a) fix也是Rstudio的一个可视化工具,直接在a基础上修改数据框的内容。
高维数据中,数组和列表的区别是,数组中元素的类型必须是相同的,而列表中的成分不一定一样。
什么数据都可以在列表里面存储,元素被称为成份,R语言中的数组是矩阵的延伸,必须是三维以上的数据结构。列表主要是用于函数调用和返回。
举例:
#创造一个列表,里面有三个元素x,y,z,分别是数组,矩阵,数据框。
> (a=list(x=1:10,y=matrix(1:16,4,4),z=data.frame()))
$x
[1] 1 2 3 4 5 6 7 8 9 10
$y
[,1] [,2] [,3] [,4]
[1,] 1 5 9 13
[2,] 2 6 10 14
[3,] 3 7 11 15
[4,] 4 8 12 16
$z
data frame with 0 columns and 0 rows
举例:
> names(a) #查看列表成份
[1] "x" "y" "z"
> names(a) = c(‘C1‘,‘C2‘,‘C3‘) #修改列表成份名称
> names(a)
[1] "C1" "C2" "C3"
> (c = a[‘C2‘]) #利用成分的名称访问数,这时c是一个列表,不是矩阵,不能用c[2,3]来访问数据
$C2
[,1] [,2] [,3] [,4]
[1,] 1 5 9 13
[2,] 2 6 10 14
[3,] 3 7 11 15
[4,] 4 8 12 16
> (c[1,2]) #拿到的c是一个列表,不是矩阵,不能用c[2,3]
Error in c[1, 2] : incorrect number of dimensions
> class(c) #查看c的数据结构是列表
[1] "list"
> (c = a[[‘C2‘]]) #通过这样的方式来访问C2,C2就是矩阵了
[,1] [,2] [,3] [,4]
[1,] 1 5 9 13
[2,] 2 6 10 14
[3,] 3 7 11 15
[4,] 4 8 12 16
> class(c)
[1] "matrix"
> (c[1,2]) #能用c[2,3]来访问数据
[1] 5
> (c=a$C2) #c=a$C2和c = a[[‘C2‘]]效果一样
[,1] [,2] [,3] [,4]
[1,] 1 5 9 13
[2,] 2 6 10 14
[3,] 3 7 11 15
[4,] 4 8 12 16
> class(c)
[1] "matrix"
#查看列表中嵌套的列表的元素
> (x=list(a=list(1,2,3,4),b=c(‘Monday‘,‘Tuesday‘)))
$a
$a[[1]]
[1] 1
$a[[2]]
[1] 2
$a[[3]]
[1] 3
$a[[4]]
[1] 4
$b
[1] "Monday" "Tuesday"
> (x[[1]][[3]]) #查看子列表中的第3个元素的内容
[1] 3
> (x[[1]][3]) #查看子列表中的第3个元素
[[1]]
[1] 3
> (x[[c(1,3)]]) #查看第一个元素的第三个内容
[1] 3
> (x[[c(2,2)]]) #查看第二个元素的第二个内容
[1] "Tuesday"
#列表对元素有不完全匹配的功能
> (y=list(asdfg=1:10,rtytre=11:20)) #先生成一个有两个成分的元素
$asdfg
[1] 1 2 3 4 5 6 7 8 9 10
$rtytre
[1] 11 12 13 14 15 16 17 18 19 20
> y$asdfg #输入完整的名字
[1] 1 2 3 4 5 6 7 8 9 10
> y$a #输入开头字母一样可以完成匹配
[1] 1 2 3 4 5 6 7 8 9 10
> y[[‘asdfg‘]]
[1] 1 2 3 4 5 6 7 8 9 10
> y[[‘a‘,exact = FALSE]] #输入开头字母一样可以完成匹配,不过需要设置exact = FALSE关闭精确匹配
[1] 1 2 3 4 5 6 7 8 9 10
举例:
#(a = array(1:60,dim = c(3,4,5)))
> (a = array(1:60,c(3,4,5)))
, , 1
[,1] [,2] [,3] [,4]
[1,] 1 4 7 10
[2,] 2 5 8 11
[3,] 3 6 9 12
, , 2
[,1] [,2] [,3] [,4]
[1,] 13 16 19 22
[2,] 14 17 20 23
[3,] 15 18 21 24
, , 3
[,1] [,2] [,3] [,4]
[1,] 25 28 31 34
[2,] 26 29 32 35
[3,] 27 30 33 36
, , 4
[,1] [,2] [,3] [,4]
[1,] 37 40 43 46
[2,] 38 41 44 47
[3,] 39 42 45 48
, , 5
[,1] [,2] [,3] [,4]
[1,] 49 52 55 58
[2,] 50 53 56 59
[3,] 51 54 57 60
利用下来访问元素
举例:
> (a[1,2,3])
[1] 28
举例
> (x=date()) #查看当前的时间
[1] "Sat May 07 01:51:49 2016"
> class(x)
[1] "character"
> (x2=Sys.Date()) #查看当前的日期
[1] "2016-05-07"
> (x3=as.Date("2016-06-08")) #将普通的数据转化成date型数据
[1] "2016-06-08"
> class(x3)
[1] "Date"
> weekdays(x3) #查看是星期几
[1] "星期三"
> months(x3) #查看是哪一个月
[1] "六月"
> quarters(x3) #查看是那个季度 Q2代表是第二个季度
[1] "Q2"
> julian(x3) #查看,相距1970-01-01过去多少天
[1] 16960
attr(,"origin")
[1] "1970-01-01"
举例
> (x3=as.Date("2016-06-08"))
[1] "2016-06-08"
> (x4=as.Date("2016-01-03"))
[1] "2016-01-03"
> (x3-x4) #相减
Time difference of 157 days
> as.numeric(x3-x4) #只得到数字
[1] 157
举例
> (x=Sys.time()) #查看当前时间
[1] "2016-05-07 02:06:11 CST"
> class(x)
[1] "POSIXct" "POSIXt"
> (p=as.POSIXlt(x)) #POSIXct转成POSIXlt
[1] "2016-05-07 02:08:28 CST"
> class(p)
[1] "POSIXlt" "POSIXt"
> names(unclass(p)) #unclass把内容列下,把属性去掉。names获取名称
[1] "sec" "min" "hour" "mday" "mon" "year" "wday" "yday" "isdst"
[10] "zone" "gmtoff"
> p$sec #查看信息
[1] 28.09093
> (x1 = ‘Jan 1,2015 01:01‘)
[1] "Jan 1,2015 01:01"
> strptime(x1,‘%B %d,%Y %H:%M‘)
[1] ‘2015-01-01 01:01:00 CST‘
由数字转字符,是安全的,但是由字符转数字是不安全的。因为字符的安全级别比数字高,由较高安全级别的数据类型转化成较低安全级别的数据类型是不安全的。
举例:
> (x = c(1:2,"hello",T)) #1:2是数字,"hello"是字符串,T是布尔值 由于隐式的数据类型的转换,输出x全部都是字符串
[1] "1" "2" "hello" "TRUE"
> mode(x) #查看数据类型
[1] "character"
> class(x) #查看结构类型,mode()和class()用在向量上的时候,都是character,字符型的数据
[1] "character"
> (a = matrix(1:16,nrow=4))
[,1] [,2] [,3] [,4]
[1,] 1 5 9 13
[2,] 2 6 10 14
[3,] 3 7 11 15
[4,] 4 8 12 16
> mode(a)
[1] "numeric"
> class(a) #mode方法和class方法用在矩阵或者数据框上的时候使不同的结果
[1] "matrix"
举例:
> x
[1] "1" "2" "hello" "TRUE"
> (a = matrix(1:20,nrow=4))
[,1] [,2] [,3] [,4] [,5]
[1,] 1 5 9 13 17
[2,] 2 6 10 14 18
[3,] 3 7 11 15 19
[4,] 4 8 12 16 20
> class(x)
[1] "character"
> class(a)
[1] "matrix"
> is.matrix(a) #判断a是不是矩阵
[1] TRUE
> is.matrix(x)
[1] FALSE
> (as.matrix(x)) #将不是矩阵的x转换成矩阵
[,1]
[1,] "1"
[2,] "2"
[3,] "hello"
[4,] "TRUE"
举例
#第一示例
> (y=1:10)
[1] 1 2 3 4 5 6 7 8 9 10
> dim(y)=c(2,5) #将一维的向量修改为二维的数组
> y
[,1] [,2] [,3] [,4] [,5]
[1,] 1 3 5 7 9
[2,] 2 4 6 8 10
#第二示例
> (x=matrix(1:20,nrow=5))
[,1] [,2] [,3] [,4]
[1,] 1 6 11 16
[2,] 2 7 12 17
[3,] 3 8 13 18
[4,] 4 9 14 19
[5,] 5 10 15 20
> (dim(x)=c(5,2,2)) #将二维的数组修改为三维的列表
[1] 5 2 2
> x
, , 1
[,1] [,2]
[1,] 1 6
[2,] 2 7
[3,] 3 8
[4,] 4 9
[5,] 5 10
, , 2
[,1] [,2]
[1,] 11 16
[2,] 12 17
[3,] 13 18
[4,] 14 19
[5,] 15 20
> (x=c(1,NA,2,NA,3))
[1] 1 NA 2 NA 3
> x[!is.na(x)]
[1] 1 2 3
> (x=c(1,6,2,NA,3))
[1] 1 6 2 NA 3
> (y=c("a","b",NA,"c",NA))
[1] "a" "b" NA "c" NA
> (t=c(‘2‘,6,‘8‘,‘9‘,‘10‘))
[1] "2" "6" "8" "9" "10"
> (z=complete.cases(x,y,t))
[1] TRUE TRUE FALSE FALSE FALSE
> x[z]
[1] 1 6
> y[z]
[1] "a" "b"
> t[z]
[1] "2" "6"
> library(datasets) #导入datasets数据集
> head(airquality) #查看datasets中airquality数据开头
Ozone Solar.R Wind Temp Month Day
1 41 190 7.4 67 5 1
2 36 118 8.0 72 5 2
3 12 149 12.6 74 5 3
4 18 313 11.5 62 5 4
5 NA NA 14.3 56 5 5
6 28 NA 14.9 66 5 6
#由输出可见第5、6号记录分别在第一个域和第一、二个域上是有缺省值的。
> g=complete.cases(airquality)
> airquality[g,][1:10,] #选择airquqlity中没有缺省值的那些记录,保留所有的域。查看1到10行,列全选。
Ozone Solar.R Wind Temp Month Day
1 41 190 7.4 67 5 1
2 36 118 8.0 72 5 2
3 12 149 12.6 74 5 3
4 18 313 11.5 62 5 4
7 23 299 8.6 65 5 7
8 19 99 13.8 59 5 8
9 8 19 20.1 61 5 9
12 16 256 9.7 69 5 12
13 11 290 9.2 66 5 13
14 14 274 10.9 68 5 14
#由输出可见,第5、6、10、11行是有缺省值的被过滤了
标签:
原文地址:http://blog.csdn.net/tonydandelion2014/article/details/51405021