栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > R语言

R语言 统计描述 分组统计(各种小方案)

R语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

R语言 统计描述 分组统计(各种小方案)

可以直接复制到R运行
#加载包
library(tidyverse)
#创建一系列数据
data=data.frame(
  row.names = c('QWE','TYE','WUN','EJN','JDB',
                'wuy','okf','Aqe','Bdf','wty') ,
  Chinese = c(50, 60, 64, 55, 59,
              54, 61, 63, 64, 66 ),
  Math =  c(72, 68, NA, 29, NA,   #这里故意设置了缺失值
            45, 76, 74, 76, 75 ),
  gender = c(1, 2, 1, 2, 2, 2,1,1,2,1),  #1=男  2=女
  smoke = c('y','n','y','y','y','n','n','y','n','y'),
  bmi = c('正常','低体重','正常','超重','肥胖',
          '低体重','超重','正常','低体重','正常')
)
#自定义function内容
describe<-function(x,na.omit=TRUE){     #na.omit=TRUE不忽略缺失值
  if (na.omit)
    Miss<-sum(is.na(x)==TRUE)    #统计缺失值个数
  x<-x[!is.na(x)]                #去掉缺失值,下面的都是去掉NA计算的
  m<-mean(x)
  n<-length(x)                   #全部数据(已经去掉缺失值的)
  s<-sd(x)
  skew<-sum((x-m)^3/s^3)/n
  kurt<-sum((x-m)^4/s^4)/n-3
  Normal_ks=ks.test(x,"pnorm")[["p.value"]]
  #Noraml_sh=shapiro.test(x)[["p.value"]]    #把#号去掉可用
  return(round(c(n=n,Miss=Miss,mean=m,stdev=s,
                 skew=skew,kurtosis=kurt,
                 Normal_ks=Normal_ks
                 #Noraml_sh=Noraml_sh       #把#号去掉可以用
                 ),3))
}
#第一种分组统计法
b1 <- data    %>%
  filter(gender==1)  %>%
  select(Chinese,Math) %>%
  sapply(describe)
b2 <- data    %>%
  filter(gender==2)  %>%
  select(Chinese,Math) %>%
  sapply(describe)
cbind(b1,b2)  %>% print()
#第二种分组统计
describe_by<-function(x,na.omit=TRUE)sapply(x,describe,na.omit=TRUE)
a=by(data[,c('Chinese','Math')],data$gender,describe_by)
a
cbind(a[["1"]],a[["2"]])
#第三种方式
describe_by<-function(x,na.omit=TRUE)sapply(x,describe,na.omit=TRUE)
myvars <- c('Chinese','Math')
by(data[myvars], 
   list(xingbie=data$gender,
        xiyan=data$smoke), 
   FUN=describe_by)
#一些说明
# ties should not be present for the Kolmogorov-Smirnov test
#样本数据中存在有相同的值,单样本K-S检验要求检验分布是连续的,
#而连续分布出现相同值的概率为0.如果是出现相同的,则连续分布的假设不成立,
#则该方法无法使用

#第四种
library(Hmisc)    #在Hmisc包,需要预加载
describe(data$age) 
describe(data[data$nq101==1,]$age) #分组统计

#第五种 描述百分位数的
quantile(data[data$nq101==1, ]$age, p = c(0.05,0.25, 0.5, 0.75)) #分组统计
quantile(data$age, p = c(0.05,0.25, 0.5, 0.75))

#第六种 map函数
library(purrr)
map(data[data$group=="case",1:2],mean)

#第七种
#aggregate分类汇总函数
aggregate(x=list(), #进行分类的数据
          by=list(),#进行分类的数据条件,也就是分组
          FUN=
          )

fenlei1 <- aggregate(x=list(Q=data$Sepal.Length), #进行分类的数据  Q是行名
          by=list(group=data$Species),#进行分类的数据条件,也就是分组 
          FUN=mean,    #length mean sd 
)
fenlei1


#其他
summary(data[data$Species=='virginica',]$Sepal.Length)
mean(data[data$Species=='virginica',]$Sepal.Length)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/855796.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号