-
提取符合多个条件的元素:& 并且;| 或者
查看全部 -
x[x>5] #提取符合条件的元素
查看全部 -
summarize data
head(airquality,10) #默认值是6
tail(airquality)
summary(airquality) #返回每一个值中最大最小,25%分为点 ,75%分为点,中位数,均值,缺失值存在个数个数
summary函数让我们对数据的分布有一个整体的把握
table(airquality$Ozone,useNA="ifany") #如果有缺失值,要总结出信息
table(airquality$Month, airquality$Day) #table可以对两个变量进行总结, 得到一个二维表,月份是行,日期是列,内容是出现记录的次数
any(is.na(airquality $ Ozone )) # 如果返回值是TRUE,说明一定有缺失值
sum(is.na(airquality $ Ozone)) # 缺失值的总数
all(airquality$Month<12) #判断是否所有月份都小于12
#泰坦尼克表
titanic<-as.data.frame(Titanic)
head(titanic)
dim(titanic)
summary(titanic)
交叉:
x<- xtabs(Freq ~ Class + Age, data=titanic)
ftable(x) #排版更加扁平化
object.size(airquality)
print(object.size(airquality), units="Kb")
查看全部 -
sort: 对向量进行排序,返回排好序的内容
order: 返回排好序的内容的下标,多个排序标准(返回值是对应“排名”的元素所在向量中的位置)
sort(x)
sort(x, decreasing=TRUE) 降序排列
查看全部 -
split(向量/列表/数据框, 因子/因子列表)
x <- c(rnorm(5), runif(5),rnorm(5,1))
f <- gl(3,5)
split(x,f)
#split函数返回了一个列表,第一个名称是1,对应水平1对应的x中前五个元素,水平2对应x中间五个元素,水平3对应x后五个元素
lapply(split(x,f) , mean)
split函数主要用于将一组数据以一定的规则分组并返回一个list。
split(x, f)
x: 一个待分组的向量或者data frame
f: 一个factor或者list(如果list中元素交互作用于分组中),以此为规则将x分组
rm是remove的意思,例如你指定na.rm=T,就会移除na数据
查看全部 -
tapply(向量,因子/因子列表,函数/函数名)
f<-gl(3,5) #3个水平,每个水平五个连续数
gl(k,n,length=,label=)构造一个因子序列。k为水平数,n为每个水平连续出现的次数,length为整个序列的长度,label为因子标签。
举例:gl(3,5,length=20,label=c('a','b','c'))tapply(x, f, mean) # 输出x前五个数据均值,中间五个数据均值,后五个数据均值
tapply(x,f ,mean,simplify=FALSE) #输出没有简化的列表
查看全部 -
mapply(函数/函数名称,函数数据,函数相关参数)
list (rep(1:4), rep(2,3), rep(3,2), rep(4:1))
mapply(rep, 1:4, 4:1) #4:1 规定数据要重复多少次
s<-function(n, mean, std){
rnorm(n,mean,std)
} #从均值为mean,标准差为std的整体里抽取n个数据
s(4,0,1) # 从均值为0,标准差为1的整理里抽取四个数据
mapply(s, 1:5, 5:1, 2) #1:5 对应着n,每次在分布中抽取多少个数据出来 / 5;1 对应着mean,均值为多少 / 2代表std标注差
查看全部 -
#apply
x<-matrix(1:16, 4,4 )
apply(x,2 mean) # 沿着x的第二维度求平均,x有两个维度,行和列,第二个维度就是沿着x的列求平均
apply(x,2, sum) # 沿着x的第二维度求和
rowSum(x) / rowMean(x)
colSum(x) / colMean(x)
x2<-matrix(rnorm(100), 10, 10 ) #随机从正太分布的整体里抽出100个数据
x<- rnorm(100) #产生100个服从正态分布的随机数
x<-rnorm(100,3,4) #产生100个均值是3,标准差为4的随机数apply(x2, 1, quantile, probs=c(0.25,0.75 ))
x3<-array(rnorm(2*3*4), c(2,3,4 ))
apply(x, c(1,2), mean) #在第一维和第二维组成的平面上,沿着第三维求平均
查看全部 -
循环函数
lapply:可以循环处理列表中每一个元素
lapply(列表,函数/函数名,其他参数)
x<-list(a=c(1:10)), b=c(11,21,31,41,51))
lapply(x, mean)
x2<-1:4 #创建一个向量x2
lapply( x2, runif ) #runif函数(r + unif):从一个均匀分布的整体里,抽取若干个数出来
R语言生成均匀分布随机数的函数是runif()
句法是:runif(n,min=0,max=1) n表示生成的随机数数量,min表示均匀分布的下限,max表示均匀分布的上限;若省略参数min、max,则默认生成[0,1]上的均匀分布随机数。
lapply(x2, runif,min=0,max=100)
x3<-list(a=matrix(1:6,2,3), b=matrix(4:7),2,2 )
lapply(x3, function(m) m[1, ])
#函数function返回x3中每个矩阵的第一行
#sapply函数 能够化简lapply
x返回值从列表简化成向量,并不影响理解
查看全部 -
#vectorized
y<-matrix(rep(2,4),nrow=2,ncol=2) #rep函数作用是把第一个参数重复四次。
x %*%y #得到两个向量相乘
查看全部 -
x<-c(1,NA,2,NA,3)
is.na(x) # 返回逻辑向量 FALSE TRUE FALSE TRUE FALSE
(FALSE代表不是缺失值,TRUE代表是缺失值)
x[!is.na(x)] #运行后得到 1 2 3,向量中不是缺失值的元素
x<-c(1,NA,2,NA,3)
y<-c("a","b",NA,"c",NA)
z<-complete.cases(x,y) #选取那些对应位置都不是缺失值的元素,
x[z] #得到x,y里都不是缺失值的元素
y[z] #得到x,y里都不是缺失值的元素
用R自带的数据集来展示complete函数的功能:
library(datasets) #加载一个datasets的包,这个包里包含了很多现成的数据集,找到airquality这个数据集,可以查看airquality这个数据集中有哪些变量
head(airquality) # 展示前六行, 一行代表一个记录,一列代表一个变量,选择在所有变量上都没有缺失值的记录
g<-complete.cases(airquality)
airquality[g, ][1: 10, ]
查看全部 -
subset of list
[[]] / $ / [[]][[]] / [[]][]
嵌套列表中的元素以及不完全匹配(partial matching)
x<-list(id=1:4, height=170, gender="male")
x[1] #运行之后得到列表中的第一个元素 名字:id,内容: 1 2 3 4
x["id"] # 结果一样
x[1]和x["id"] 可以拿到列表中某一个元素,输入下标or输入元素名称
list如果只是用一对[],只能拿到元素的名字,不能拿到内容,
想直接拿到列表中某一个元素的内容,要使用嵌套的方括号 x [ [ 1 ] ], 同理可以输入x[["id"]]
也可以输入:x$id, 输出结果同样是1,2,3,4的内容
x[c(1,3)] # 拿到list中第一个元素和它的内容,以及第三个元素和它的内容
y<-"id"
x[["id"]] 和 x[[y]] 返回值都是1 2 3 4,
但是!!!: x$id 和 x$y(返回值为NULL)
列表中获取嵌套的元素
x2<-list (a=list(1,2,3,4), b=c("Monday","Tuesday"))
x2[[1]] [[2]] #拿到列表x2 第一个元素中的第二个元素内容
x2[[1]][2] #拿到的是子列表中的第二个元素,而不是第二个元素的内容
x2[[c(1,3)]] #列表中第一个元素中的第三个元素,拿到内容3
x2[[c(2,3)]] #列表中第二个元素中的第二个元素,拿到内容"Tuesday"
总结:想获得嵌套列表中的内容,可通过[[]][[]] or [[c()]]获得
#partial matching
l<-list(asdfgh= 1:10)
l$asdfgh
l$a #也可以匹配
但是l[["a"]] 为空NULL,因为在我们的列表中,没有返回值为a的元素
l[["a", exact = FALSE ]] #关掉了精确匹配,就可以进行不完全匹配了
查看全部 -
x<-data.frame(v1=1:5, v2=6:10, v3= 11:15)
x$v3[c(2,4) ]<-NA #第三列的第二行第四行设为缺失值
x[,2]
x[, "v2"]
x[ ( x$v1<4 $ x$v2>=8) , ]
x[ x$v1 >2, ] #返回 v1那一行全部大于2的行,全部列
x[ which(x$v1 > 2), ] # 返回值一样
which( x$ v1 >2) #f返回3,4,5. 告诉我们第三行第四行第五行使我们想要的,which返回的是向量中为真的元素值的下标
x$v1>2 # 不套which返回的是真假的逻辑判断向量,3,4,5是真,1,2是假
subset(x,x$v1>2)
查看全部 -
矩阵的子集:矩阵有两个维度,行和列,因此要拿到某个特定元素,需要指明第几行,第几列,
x[1,2]拿到第一行,第二列的元素
x[1,] 拿到第一行一整行的数据,列为空
x[2,c(1,3)] 拿到第二行,第一列和第三列的元素
class(x[1,2]) 返回值为integer,说明返回的是一个向量vector
如果想返回一个矩阵,而不是一个向量,需要传入第三个参数:
x[1,2,drop=FALSE], 这个参数帮助我们关掉了返回向量这个选择,保证返回的是一个矩阵,矩阵会把行列都列出来,然后才是元素。向量只会列出元素。
查看全部 -
raw dataset ——clean dataset
构建子集的方法1:[] 方括号,提取一个或多个same type elements
方法2:[[]] 两个方括号嵌套,从list or data frame中提取elements
方法3:$符号,按名字从list or df中提取elements
例如:创建向量x
x<-1:10
x[1] #想拿到第一个元素 请注意:R语言和C的区别是,R数组下标从1开始,C从0开始
x[5] #拿到第五个元素
x[1:5] #拿到前五个元素
有时候需要逻辑判断的条件,拿到子集
x[x>5]
直接输入x>5, 会对每个元素进行判断,结果用F or T的方式输出
x[x>5 & x<7]
x[x<3 | x>7]
给元素命名:
y<-1:4
names(y)<-c("a","b","c","d")
y[2] or y["b"]
使用名字来找到数据是一种常用的手段,因为有时候我们不知道想要的收据的下标是什么,但是知道元素的名字
查看全部
举报