数组 array 矩阵 list 数据框 dataframe
2015-08-11 16:56 xplorerthik 阅读(943) 评论(0) 编辑 收藏 举报转自 : http://blog.csdn.net/u011253874/article/details/43115447
- <span style="font-size:14px;">#R语言备忘录三#
- #数组array和矩阵matrix、列表list、数据框dataframe
- #数组
- #数组的重要属性就是dim,维数
- #得到4*5的矩阵
- z <- 1:12
- dim(z) <- c(3,4)
- z
- #构建数组
- x <- array(1:20, dim = c(4,5))
- #三维
- y <- array(1:18, dim = c(2,3,3))
- #数组下标
- y[1, 2, 3]
- #数组的广义转置,维度发生变化,把2维变成1维,把3维变成2维,把1维变成3维,即D[i,j,k] = C[j,k,i]
- C <- array(1:24, dim = c(2,3,4))
- D <- aperm(A, c(2,3,1))
- #apply用于数组固定某一维度不变,进行计算
- apply(A, 1, sum)
- #矩阵
- #产生矩阵
- A <- matrix(1:15, nrow=3, ncol=5, byrow=TRUE)
- B <- matrix(3:17, nrow=5, ncol=3, byrow=TRUE)
- #求方阵行列式的值
- det(matrix(1:4, ncol = 2))
- #内积
- #矩阵的内积
- A %*% B
- #也可以使用crossprod函数
- crossprod(A, B)
- crossprod(A)
- #向量的外积,也叫叉积
- x <- 1:5
- y <- 2*1:5
- x %o% y
- #也可以使用tcrossprod函数、outer
- outer(x, y)
- tcrossprod(x)
- #产生对角阵
- #如果变量是一个向量,则是以向量为对角线元素的对角阵
- v <- c(1, 3, 5)
- diag(v)
- #如果变量是一个矩阵,则是取矩阵对角线元素作为对角阵对角线元素
- diag(A)
- #解线性方程Ax=b,
- b <- matrix(c(1,1,1), nrow = 3, byrow = TRUE)
- B <- matrix(1:9, nrow = 3, byrow = TRUE)
- solve(B,b)
- #求矩阵的逆
- solve(B)
- #ev$values是特征根,ev$vectors是特征向量组成的矩阵
- SM <- crossprod(A, A)
- ev <- eigen(SM)
- #奇异解,svd$d返回的是矩阵A的奇异值,svd$u则是正交阵U,svd$v对应的是正交阵V, A = UDVT
- svdA <- svd(A)
- #把矩阵拉成向量
- as.vector(A)
- #数组或矩阵的维的名字
- X <- matrix(1:6, ncol = 2,
- dimnames = list(c("one", "two", "three"), c("First", "Second")),
- byrow = T)
- #亦或是
- dimnames(A) <- list(c("one", "two", "three"), c("First", "Second"))
- colnames(A) <- c("First", "Second")
- rownames(A) <- c("one", "two", "three")
- #列表
- #构建列表
- Lst <- list(name="Fred", wife="Mary", no.children=3, child.ages=c(4,7,9))
- #列表元素,列表名[[下标]]
- Lst[[2]]
- Lst[[4]][2]
- #也可以使用名字代替下标
- Lst[["name"]]
- Lst$name
- #修改列表
- Lst$name <- c("John", "Tom")
- #删除列表某项
- Lst$name <- NULL
- #连接几个列表
- list.ABC <- c(list.A, list.B, list.C)
- #数据框
- #data.frame,用法和list相同,如果list里的成分满足数据框,也可以使用as.data.frame转换
- df<-data.frame(
- Name=c("Alice", "Becka", "James", "Jeffrey", "John"), Sex=c("F", "F", "M", "M", "M"),
- Age=c(13, 13, 12, 13, 12),
- Height=c(56.5, 65.3, 57.3, 62.5, 59.0)
- Weight=c(84.0, 98.0, 83.0, 84.0, 99.5)
- )
- df
- #矩阵可以通过data.frame(X)转换
- #取数据框的一部分
- df[1:2, 3:5]
- df[["Height"]]
- df$Weight
- #命名
- names(df)
- rownames(df)
- #attch()函数将数据框中的变量调入内存中,方便调用当中的数据
- attach(df)
- #取消连接
- detach(df)
- #调用edit进行编辑数据
- edit(df)
- #因子factor
- sex <- c("M","M", "F","F")
- sexf <- factor(sex)
- #因子水平
- sex_level <- levels(sexf)
- #用table统计各类数据的频数
- sex_tab <- table(sexf)
- #用gl()产生因子
- #gl(n, k, length = n * k, labels = 1:n, ordered = FALSE)
- </span>
、、、、、、、、、、、、、、、、、、、、、、、、、、、
- #R语言学习备忘录一#
- #向量运算#
- x <- c(1,2,3,6)
- #不小于x的最小整数
- ceiling(x)
- #不大于x的最大整数
- floor(x)
- #向0方向截取的x中的整数
- trunc(x)
- #将x舍入为指定位的小数
- round(x,digits=2)
- #将x舍入指定的有效数字位数
- signif(x,digits=2)
- #三角函数
- cos(x)
- sin(x)
- tan(x)
- acos(x)
- asin(x)
- #分位数,如求25%及50%分位数
- quantile(x,c(.25,.5))
- #求值域
- range(x)
- #求乘积函数
- prod(x)
- #滞后差分
- diff(x)
- #求最大值和最小值对应的位置
- which.min(x)
- which.max(x)
- #数据标准化
- x<-c(123,232,212,232,120,273)
- mydata<-scale(x)
- mydata
- #正则表达式匹配
- str<-c("a","A","B","c")
- grep("A",str,fixed=TRUE)
- #字符
- #分割符strsplit
- strsplit("abcde","")
- #连接字符paste
- paste("x",1:10,sep="")
- paste("x",1:5,sep="T")
- paste("Today is ",date())
- #大写转换toupper
- toupper("abcEF")
- #小写转换tolower
- tolower("ABC")
- #计算字符数量 nchar
- x<-c("ab","deew","James")
- nchar(x)
- nchar(x[2])
- #提取或替换一个数值,和Excel mid函数差不多 substr
- x<-"abcdefg"
- substr(x,2,5) #2到5个元素
- substr(x,2,5)<-"1111111"
- x
- #注意两种等差数列的差别
- 1:n-1
- 1:(n-1)
- #重复函数rep
- y<-rep(1:5,2)
- y
- #等间隔函数
- seq(-5, 5, by=.2)
- seq(length=51, from=-5, by=.2)
- #上下两种方式效果一样
- #求行均值
- apply(mydata,1,mean)
- #求列均值
- apply(mydata,2,mean)
- #逻辑变量
- #判断一个逻辑向量是否都为真的函数是all
- all(c(1,2,3,4,5,6)>3)
- #判断一个逻辑向量是否有为真的函数any
- any(c(1,2,3,4,5,6)>3)
- #缺失数据
- #NA表示数据缺省或缺失
- z <- c(1:3, NA)
- z
- a <- is.na(z)
- #修改缺失数据
- z[is.na(z)] <- 0
- #is.nan()判断数据是否精确,inf也属于非精确
- x <- c(0/1, 0/0, 1/0, NA)
- is.nan(x)
- is.finite(x)
- is.infinite(x)
- is.na(x)
- #复数向量
- #复数z=x+isin(x)
- x <- seq(-pi, pi, by = pi/10)
- y <- sin(x)
- z <- complex(re = x, im = y)
- plot(z)
- lins(z)
- #向量的下标运算
- x <- c(1,4,7)
- x[c(2,3)]
- #修改元素值
- x[c(1,3)] <- c(22, 33)
- #逻辑向量
- x <- c(1,4,7)
- x < 5
- x[x<5]
- #分段函数
- y <- numeric(length(x))
- y[x<0] <- 1-x[x<0]
- y[x>=0] <- 1-x[x>=0]
- #即y=1-x,x<0; y=1+x,x>=0
- #下标的负整数运算表示的是删除
- v <- 10:20
- v[-(1:5)]
- #取字符串为下标
- ages <- c(Li=33, Zhang=29, Liu=18)
- ages["Zhang"]
- #给向量赋予名字
- fruit <- x(5, 10, 1, 29)
- names(fruit) <- c("orange", "banana", "apple", "peach")