R中的数据结构(Array,Factor,List,DataFrame)

来源:互联网 发布:怎么查看端口是否打开 编辑:程序博客网 时间:2024/05/29 09:11

1、R中的数据结构-Array

#一维数组x1 <- 1:5;x2 <- c(1,3,5,7,9)x3 <- array(c(2, 4, 6, 8, 10))#多维数组xs <- array(1:24, dim=c(3,4,2))#访问x1[3]x2[c(1,3,5)]x3[3:5]xs[2, 2, 2]xs[2, 2, 1]#增加x1[6] <- 6x2[c(7, 9, 11)] <- c(11, 13, 15)#动态增加x1[length(x1) + 1] <- length(x1) + 1append(x2, 17)x2 <- append(x2, 17)#修改,凡是能够访问到的地方,都可以修改x1[3] <- 30#删除,凡是能够访问到的地方,都可以删除x1[-3]x1 <- x1[-3]#查找/过滤x1[x1 >= 4]

2、R中的数据结构-Factor

Factor因子
因子用来存储类别变量和有序变量,这类变量不能用来计算,只能用来分类或者计数。
因子(Factor):因子表示分类变量
有序因子(odered factor):有序因子表示有序变量。

#读取学生成绩的数据data <- read.csv('1.csv', fileEncoding='utf8');#查看数data#查看第一列数据data[, 1]#把第一列数据转换为分类结构data[, 1] <- factor(data[, 1]);#查看第一列数据data[, 1]#作用一、统一映射为另一个标签数据data[, 1] <- factor(  data[, 1],   labels=c('三年一班', '三年二班', '三年三班'));#查看第一列数据data[, 1]#作用二、处理异常数据data <- read.csv('2.csv', fileEncoding='utf8');datadata[, 1] <- factor(  data[, 1],   levels=c(1, 2, 3),  labels=c('三年一班', '三年二班', '三年三班'));data#转换成字符向量as.vector(data[, 1]) #转换成数字向量as.numeric(data[, 1]) #连续变量的离散化score <- data[,3]#切分成3组score1 <- cut(score, breaks = 3) table(score1)#切分成自己设置的组score2 <- cut(score, breaks = c(90, 100, 110, 120, 130, 140)) table(score2)#一个有序因子scoreOrder <- ordered(  score2,   labels = c('bad', 'ok', 'average', 'good', 'excellent'))scoreOrdertable(scoreOrder)#可排序的离散分类结构data <- read.csv('1.csv', fileEncoding='utf8');data[, 1] <- ordered(  data[, 1],   levels=c(1, 3, 2),  labels=c('三年一班', '三年三班', '三年二班'));table(data[, 1])data[order(data[, 1]),]data <- read.csv('1.csv', fileEncoding='utf8', stringsAsFactors=FALSE);data[, 2]

3、R中的数据结构-List

数组的元素要求是同类型(不同类型会转成同一类型),List则可以组合多种不同类型的对象。一个List就像是一个JSON,一个包含很多键值对的数据结构。

#一、list的创建方式:#1、无tag的方式:j<-list("Joe", 55000, T)#2、带tag的方式:j<-list(name="Joe", salary=55000, union=T)#二、list中元素的访问:#1、list_name$tag_namej$namej$salaryj$union#2、list_name[[tag_name]]j[['name']]j[['salary']]j[['union']]#3、list_name[[index]]j[[1]]j[[2]]j[[3]]#4、如果按照数组的访问方式,返回的是一个listj[2]j[2]$salary#5、访问标签labels(j)labels(j[2])#6、一次只能访问一个位置list[1:2]list[[1:2]]#Error in list[[1:2]] : object of type 'builtin' is not subsettable#三、修改list#1、增加,可以访问的地方,都可以增加j$sex <- '男'j[5] <- 173#2、修改,同理,可以访问的地方,都可以修改j$salary <- j$salary+j$salary*0.08#3、删除,把可以访问的地方,设置为NULL,即为删除,#注意,删除之后,它后面的位置索引都自动减一j$sex <- NULL;j#四、检索j=='Joe'#五、查看长度length(j)

4、R中的数据结构-DataFrame

数据框用于存储多行和多列的数据集合。可以把数据框理解为excel中的列。


#定义数据框age <- c(21, 22, 23)name <- c('KEN', 'John', 'JIMI')f <- data.frame(age, name);f#如果列没有内容,列定义是不成功的df <- data.frame(age=c(), name=c())df <- c(1, 2)#可以先赋值为NA值df <- data.frame(age=c(NA), name=c(NA))#数据框的变量名[行位置 ,  列位置]f[1,1]f[,1]f[1,]#修改列名names(f)names(f) <- c("age2", "name2")fcolnames(f)names(f)[2] <- "name2" #如果不知道列序号,只是知道列名,如何修改某一列呢?names(f)[names(f)=='name'] <- "name2" #修改行名row.names(f)row.names(f) <- 0:2f#删除行f[-1,]f#注意,删除后的DataFrame需要一个变量来接收,并不会直接修改原来的nf <- f[-1, ]nff <- f[-1, ]#删除列f[, -1]fnf <- f[, -1]nf#增加行f[nrow(f)+1, ] <- c(24, "KENKEN")f#增加列f[, 'sex'] <- c(0, 1, 1);f

原创粉丝点击