Day5-数据结构
今天发烧了一个上午,躺尸了整整一个上午,然后老板夺命连环call直接给我整pofang了,害,不说了,开始今天滴学习~
今天滴演示代码全部来自花花老师滴生信星球哟~只有些许修改
向量vector
1.标量和向量的区分
代码语言:txt复制首先明确“元素”的意思,元素指的是数字或者字符串(用chr表示)等,根据它可以区分两个词: 标量:一个元素组成的变量 向量:多个元素组成的变量 ------来自生信星球
x<- seq(1,10,by = 0.5) #1-10之间每隔0.5取一个数
x<- rep(1:3,times=2) #1-3 重复2次
2.从向量中提取元素
(1)根据元素位置
代码语言:txt复制x[4] #x第4个元素
x[-4]#排除法,除了第4个元素之外剩余的元素
x[2:4]#第2到4个元素
x[-(2:4)]#除了第2-4个元素
x[c(1,5)] #第1个和第5个元素
(2)根据值
代码语言:txt复制x[x==10]#等于10的元素
x[x<0]
x[x %in% c(1,2,5)]#存在于向量c(1,2,5)中的元素
数据框 data frame
(1)读取本地数据
代码语言:txt复制a <- read.csv('duoduo.txt',sep = ',',header = T)
b <- read.table('duoduo.txt',header = T,sep = 't')
sep与header的意义
sep 参数:sep 参数用于指定 CSV 文件中的字段分隔符。默认情况下,read.csv 函数会将逗号作为字段分隔符,但是你可以使用 sep 参数来指定其他分隔符,比如制表符 t 或者分号 ; 等。这样可以确保正确地解析 CSV 文件中的数据。 header 参数:header 参数用于指定 CSV 文件中是否包含列名(标题行)。如果 CSV 文件中包含列名,则可以将 header 参数设置为 TRUE,这样读取的数据框将包含列名。如果 CSV 文件中不包含列名,则可以将 header 参数设置为 FALSE,这样读取的数据框将使用默认的列名。
(2)查看行名和列名、行数和列数
代码语言:txt复制colnames(a) #查看列名
rownames(a) #查看行名
dim(a)#几行几列
(3)数据框的导出
代码语言:txt复制write.table(a,file = "yu.txt",sep = "t",quote=F)#分隔符改为逗号,字符串不加引号(默认格式带由引号)
(4)变量的保存与重新加载
代码语言:txt复制save.image(file="day5.RData")#保存当前所有变量
save(a,file="test.RData")#保存其中一个变量
load("test.RData")#再次使用RData时的加载命令
(5)提取元素
代码语言:txt复制- a[x,y]#第x行第y列
- a[x,]#第x行
- a[,y]#第y列
- a[y] #也是第y列
- a[a:b]#第a列到第b列
- a[c(a,b)]#第a列和第b列
- a$列名#也可以提取列(优秀写法,支持Tab自动补全哦,不过只能提取一列)
(6)【选修部分】直接使用数据框中的变量
plot(iris$Sepal.Length,iris$Sepal.Width)
附加题:save(a,file="test.RData")这句代码如果报错object a not found,是为什么,应该怎么解决?
补充一下我滴R语言实战笔记嘿嘿
代码语言:txt复制# 2.2数据结构
a <- c(1:7)
a[2:6]
b <- c("a","b","c")
b[2]
c <- c(TRUE,FALSE,T,F)
c[1]
c[4]#向量(只能包含一种数据类型) vector
#代码清单2-1 创建矩阵
y <- matrix(1:20,nrow = 5,ncol = 4,byrow = F)
cells <- c(1,26,24,68)
rnames <- c('R1','R2')
cnames <- c('C1','C2')
mymatrix <- matrix(cells,nrow = 2,ncol = 2,byrow = T,dimnames = list(rnames,cnames))
mymatrix <- matrix(cells,nrow = 2,ncol = 2,byrow = F,dimnames = list(rnames,cnames))
##row是行,col是列
#代码清单2-2 矩阵下标的使用
x <- matrix(1:10,nrow = 2)
x[2,]
x[,2]
x[2,2]
x[1,2:5]
#矩阵(2维,只能包含一种数据类型)
#代码2-3 创建一个数组
dim1 <- c("A1","A2")
dim2 <- c("B1","B2","B3")
dim3 <- c("C1","C2","C3","C4")
myarray <- array(1:24,dim = c(2:4),dimnames = list(dim1,dim2,dim3))
#直接理解成矩阵的扩展(多维,只能包含一种数据类型)
#代码2-4 创建一个数据框data frame(可以包含多种数据类型,但是每一列只能包含一种数据类型)
patientID <- c(1:4)
age <- c(24,28,32,34)
diabetes <- c("Type1","Type1","Type2","Type1")
status <- c('poor','improved','excellent','poor')
patientsdata <- data.frame(patientID,age,diabetes,status)
#代码2-5 选取数据框中的元素
patientsdata[c('age','status')]#可以按列展示
patientsdata$patientID#展示数据框中的特定变量
##想展示patientsdata里糖尿病变量和病情变量的两者之间的列联表
table(patientsdata$diabetes,patientsdata$status)
##使用with函数来简化代码
summary(mtcars$mpg)
plot(mtcars$mpg,mtcars$disp)
plot(mtcars$mpg,mtcars$wt)
#用with
with(mtcars,
{summary(mpg)
plot(mpg,disp)
plot(mpg,wt)
})
#实例标识符case identifier
patientsdata <- data.frame(patientID,age,diabetes,status,row.names = patientID)
#代码2-6 因子的使用
patientID <- c(1:4)
age <- c(24,28,32,34)
diabetes <- c("Type1","Type1","Type2","Type1")
status <- c('poor','improved','excellent','poor')
diabetes <- factor(diabetes,ordered = F)
status <- factor(status,ordered = T,levels = c("poor",'improved',"excellent"))
patientsdata <- data.frame(patientID,age,diabetes,status)
str(patientsdata)#显示对象的结构
summary(patientsdata)
今天滴学习就到此结束啦!