您的位置:首页 > 其它

数组 array 矩阵 list 数据框 dataframe

2015-08-11 16:56 274 查看
转自 : 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")
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: