R语言melt、table、cut函数应用及解释

·cut():切割将x的范围划分为时间间隔,并根据其所处的时间间隔对x中的值进行编码。https://blog.csdn.net/yyykkklll123/article/details/83277194

> j1<-c(23,62,72,80,59,82,90,43,94)
> break1<-fivenum(j1)
> labels = c("差", "中", "良", "优")
> j2<-cut(j1,break1,labels)
> j2
[1] <NA> 中   中   良   差   良   优   差   优  
Levels: 差 中 良 优
> j2<-cut(j1,break1,labels,ordered_result=T)
> j2
[1] <NA> 中   中   良   差   良   优   差   优  
Levels: 差 < 中 < 良 < 优

·可以发现,cut(数据, fivenum(数据))的分组结果为

(min,lower-hinge]、(lower-hinge,median]、(median,higher-hinge]、(higher-hinge,max]

而最小值却不包括在其中,也就是缺少了左边的≤min(数据)的部分,但右边不受影响。为了将分组左侧扩展到0,可改进为:

cut( 数据,  c(-1, breaks=fivenum(数据)[-1])  )

此时左边的区间为(-1,lower-hinge],成功囊括了最小值.


·table() 函数统计因子各水平的出现次数(称为频数或频率)。也可以对一般的向量统计每个不同元素的出现次数。对一个变量用 table 函数计数的结果是一个特殊的有元素名的向量,元素名是自变量的不同取值,结果的元素值是对应的频数。单个因子或单个向量的频数结果可以用向量的下标访问方法取出单个频数或若干个频数的子集。https://www.cnblogs.com/jiaxinwei/p/12343120.html

> sex = c("女","女","女","男","男"); table(sex)
sex
男 女 
 2  3 
> aim = table(sex)[table(sex)==max(table(sex))] # 还能用table求众数
> aim
女 
 3 
> max(table(sex)) # 就是求table中的最大频数
[1] 3
> table(sex)==max(table(sex)) # 发现“女”出现最多
sex
   男    女 
FALSE  TRUE 

·在掌握了cut和table的基本用法后,终于可以看懂https://blog.csdn.net/yyykkklll123/article/details/83277194了,建立数据如下:

library(reshape2)
w<-cut(ChickWeight[,1], # 对第一列的水平进行划分
       breaks=c(-1,fivenum(ChickWeight[,1])[-1]), # 区间划分为(-1,lower-hinge],(lower-hinge,median],...,(high-hinge,max]
       labels=c('瘦弱','中等','强壮','肥胖'), # 四个区间分别对应的标签
       order_result=TRUE) # 这些标签是从小到大排序的
t<-cut(ChickWeight[,2],
       breaks=c(-1,fivenum(ChickWeight[,2])[-1]),
       labels=c('年幼','青葱','成熟','垂暮'),
       order_result=TRUE) # 同上,划分区间,且左侧区间囊括最小值

#体重与年龄的关系
data<-data.frame('体重'=w,'年龄'=t) # 构建数据框,观察体重与年龄的关系
Hmisc::describe(data) # 对于该数据框,describe函数观测效果优于summary
plot(data)
plot(data.frame('年龄'=t,'体重'=w)) # 直方图观测更直观

table_data<-table(data) # 统计频数
print(table_data) # 变量间的关系一目了然
print(table(data.frame('年龄'=t,'体重'=w)))
summary(table_data) # 独立性检验结果表明:p-value = 1.541e-164,各因子显著独立
plot(table_data) # 与plot(data)直方图类似
plot(table(data.frame('年龄'=t,'体重'=w)))

melt_data<-melt(data=table_data,
                variable.names=c('体重','年龄'),
                Value.name='频数') # 使用reshape2包中的melt函数将因子和频数转换为列表的形式
str(melt_data) # 16 obs. of  3 variables
plot(melt_data$年龄,melt_data$value) # 箱线图反映不同因子的频数分布
plot(melt_data$体重,melt_data$value)

#体重、年龄与饲料的关系
data1<-data.frame('体重'=w,'年龄'=t,'饲料'=ChickWeight$Diet)
Hmisc::describe(data1)
plot(data1) # 看不清饲料与体重的关系
plot(data1$饲料,data1$体重) # 非常清晰地看出1-4号饲料对体重的影响差异!

table_data1<-table(data1)
print(table_data1)
print(table(data.frame('年龄'=t,'体重'=w,'饲料'=ChickWeight$Diet)))
summary(table_data1) # 独立性检验结果表明:p-value = 3.099e-151,各因子显著独立
plot(table_data1) # 该直方图反映了分类变量饲料的影响
plot(table(data.frame('年龄'=t,'体重'=w,'饲料'=ChickWeight$Diet)))

melt_data1<-melt(data=table_data1,
                      id='饲料',
                      variable.names=c('体重','年龄'),
                      Value.name='频数')
str(melt_data) # 64 obs. of  4 variables,对因子按分类变量“饲料”进行区分,16×4=64种
plot(melt_data1$年龄,melt_data1$value) # 因子的频数分布出现了离群点,表明饲料对“年龄与体重的关系”产生影响

结论1:这个数据适合做ANOVA方差分析

结论2:饲料种类对“年龄与体重的关系”产生影响

结论3:年龄、体重、饲料种类三个因子独立性显著

结论4:你们说,得到这个结果,后面我该干啥呢?


代码中图片和结果就不放上去了,对每一步进行了解释,参考文献如下:

https://blog.csdn.net/mr_muli/article/details/79616374

https://www.cnblogs.com/jiaxinwei/p/12343120.html

https://www.cnblogs.com/jiaxinwei/p/12343120.html

猜你喜欢

转载自blog.csdn.net/weixin_42683052/article/details/116002966