前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R中的数据结构(Array,Factor,List,DataFrame)

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

作者头像
Erin
发布2018-01-09 16:33:40
2.3K0
发布2018-01-09 16:33:40
举报
文章被收录于专栏:大数据风控大数据风控

1、R中的数据结构-Array

代码语言:javascript
复制
#一维数组
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):有序因子表示有序变量。

代码语言:javascript
复制
#读取学生成绩的数据
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,一个包含很多键值对的数据结构。

代码语言:javascript
复制
#一、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中的列。

代码语言:javascript
复制
#定义数据框
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
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年07月11日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、R中的数据结构-Array
  • 2、R中的数据结构-Factor
  • 3、R中的数据结构-List
  • 4、R中的数据结构-DataFrame
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档