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

xiaoxiao2021-02-28  73

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] <- 6 x2[c(7, 9, 11)] <- c(11, 13, 15) #动态增加 x1[length(x1) + 1] <- length(x1) + 1 append(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'); data data[, 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') ) scoreOrder table(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_name j$name j$salary j$union #2、list_name[[tag_name]] j[['name']] j[['salary']] j[['union']] #3、list_name[[index]] j[[1]] j[[2]] j[[3]] #4、如果按照数组的访问方式,返回的是一个list j[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") f colnames(f) names(f)[2] <- "name2" #如果不知道列序号,只是知道列名,如何修改某一列呢? names(f)[names(f)=='name'] <- "name2" #修改行名 row.names(f) row.names(f) <- 0:2 f #删除行 f[-1,] f #注意,删除后的DataFrame需要一个变量来接收,并不会直接修改原来的 nf <- f[-1, ] nf f <- f[-1, ] #删除列 f[, -1] f nf <- f[, -1] nf #增加行 f[nrow(f)+1, ] <- c(24, "KENKEN") f #增加列 f[, 'sex'] <- c(0, 1, 1); f

转载请注明原文地址: https://www.6miu.com/read-83410.html

最新回复(0)