1.判断数据类型
R中包含很多查看数据属性的函数,例如mode(),class(),str()等,此外还有is*系列函数与as系列函数。
x <- c(1:100)
#判断数据类型
is.vector(x)
is.character(x)
#转换数据类型
as.character(x)
is.numeric(mtcars$cyl)
as.factor(mtcars$cyl)
#不同数据类型绘图结果不同
plot(as.numeric(mtcars$cyl))
plot(as.factor(mtcars$cyl))
2.修改数据内容
数据分析中经常需要对原数据中的某些地方进行修改。修改某一行或者某一列的内容,则可以先索引出这一行或一列的内容,然后批量赋值。如果需要增加或者删除某一行或者某一列,可以使用 rbind 或者 cbind 函数。
#rbind,cbind
state <- cbind(as.data.frame(state.x77),state.region)
tapply(state$Population, state$state.region, mean)
a <- head(mtcars,20)
b <- tail(mtcars,20)
c <- rbind(a,b)
length(rownames(c))
duplicated(c)
c[duplicated(c),]
c[!duplicated(c),]
unique (c)
3.不同数据类型转换
一般的 R 函数只能接受固定类型的数据,例如绘制热图,输入数据必须是数值型向量,数据框则不行,线性回归分析中,输入数据必须为一个数据框。因此,需要熟悉各种数据类
型之间的转换
#向量和矩阵之间相互转换
x <- c(1:10)
dim(x) <- c(2,5)
#向量和数据框之间相互转换:data.frame,cbind 和 rbind 将向量转换为数据框,取出数据框的每一列为一个向量。
state <- data.frame(state.name,state.abb,state.division,state.area)
#数据框和矩阵之间相互转换:
#as.matrix()将数据框转换为矩阵
iris.mat <- as.matrix(iris[1:4])
#as.data.frame()矩阵转换为数据框。
state <- as.data.frame(state.x77)
#向量和因子之间相互转换;as.factor()函数。
mtcars$cyl <- as.factor(mtcars$cyl)
4.随机抽样和排序
排序需要给定排序标准,首先确定是对数字排序还是字符串排序,数字一般是按照大小顺序,字符串按照首字母顺序排序。可以对一维数据排序,也可以对多维数据排序。R 提供了 sort 和 order 等排序方法,order 是对索引进行排序,在 R 中使用的更多。
x <- runif(n=100,min = 1,max = 100)#R中生成随机数的函数
round(x,digits = 0)
sample(x,10,replace = F)
sample(x,10,replace = T)
set.seed(1234)
sample(x,10,replace = F)
#一维数据排序
sort(rivers)
order(rivers)
rivers[order(rivers)]
sort(rivers,decreasing = T)
rev(sort(rivers))
#对二维数据进行排序
#sort(mtcars)
#order(mtcars)
order(mtcars$mpg)
mtcars[order(mtcars$mpg),]
#同时两个排序条件
mtcars[order(mtcars$mpg,mtcars$cyl),]
#反向排序
mtcars[order(mtcars$mpg,-mtcars$gear),]
```
##5.筛选和数据透视
筛选主要是将满足一定条件的内容挑选出来,例如等于某个值,或者大于,小于等,如果是字符串就是字符串的匹配。R提供了apply系列函数,包括apply,lapply,sapply,tapply,vapply等,可以对二维数据进行计算,并且可以分组进行统计,类似于Excel中的数据透视表功能
```
#条件筛选
rivers > 100
rivers[rivers>100]
rivers[rivers >100 & rivers < 500]
rivers[rivers==900]
which.max(rivers)
which.min(rivers)
which(rivers==320)
#数据透视表
apply(mtcars,2,sum)
apply(iris[1:4], 2, sd)
lapply(state.center,mean)
state.name
state.division
tapply(state.name,state.division,length)
```
网友评论