100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > [整理]统计数据的可视化——数据的频数分布

[整理]统计数据的可视化——数据的频数分布

时间:2021-07-31 11:26:44

相关推荐

[整理]统计数据的可视化——数据的频数分布

类别数据

用sample函数随机生成调查表

> opinion<-sample(c("赞成","反对"),20,replace = TRUE)> home<-sample(c("社区A","社区B","社区C"),10,replace = TRUE)> sex<-sample(c("男","女"),20,replace = TRUE)> myinfo<-data.frame("社区"=home,"性别"=sex,"态度"=opinion)> myinfo社区 性别 态度1 社区B 女 赞成2 社区B 男 赞成3 社区C 女 赞成4 社区B 女 反对5 社区B 女 反对6 社区B 男 反对7 社区B 男 赞成8 社区C 女 反对9 社区C 男 反对10 社区A 女 赞成11 社区B 男 赞成12 社区B 女 反对13 社区C 女 赞成14 社区B 男 赞成15 社区B 男 赞成16 社区B 女 反对17 社区B 女 赞成18 社区C 女 反对19 社区C 女 赞成20 社区A 男 反对

这里涉及三个类别变量:社区、性别和态度

简单频数表:也称为一维列联表

summary函数:生成频数分布表

> summary(myinfo)社区 性别态度 社区A: 2 男: 8 反对: 9 社区B:12 女:12 赞成:11 社区C: 6

table函数:生成频数分布表

prop.table:转为百分比表

> table(myinfo$态度)反对 赞成 9 11

> prop.table(table(myinfo$态度))*100反对 赞成 45 55

二维列联表:两个类别变量交叉分类形成的频数分布表

addmargins函数:为表格加上边际和

> table(myinfo$性别,myinfo$态度)反对 赞成男 3 5女 6 6> addmargins(table(myinfo$性别,myinfo$态度)) 反对 赞成 Sum男3 5 8女6 6 12Sum 9 11 20

CrossTable函数:生成二维列联表并进行百分比分析

多维列联表:涉及两个以上类别变量

ftable函数:col.var的默认值为最后一个类别

> ftable(myinfo,row.vars = c("性别","态度"),col.var = "社区")社区 社区A 社区B 社区C性别 态度 男 反对111赞成050女 反对042赞成123

数值数据

生成数值数据频数分布表时要先将其转换为类别数据

随机产生一组数值数据:

> myvector<-sample(160:280,120)[1] 201 182 188 177 186 260 190 250 233 228 182 168 275 257[15] 230 202 183 254 237 243 215 173 205 236 245 211 230 253[29] 259 165 198 242 271 179 173 227 226 171 239 266 263 201[43] 175 257 179 261 270 220 237 186 249 225 188 241 272 226[57] 223 189 240 247 216 180 255 257 204 273 274 235 269 166[71] 167 218 194 249 219 247 169 213 181 214 196 173 241 253[85] 224 167 195 258 216 249 275 251 262 219 243 219 251 266[99] 196 232 225 275 232 188 200 265 200 227 241 227 203 191[113] 212 246 206 219 253 240 241 175

数据分组:本例中分为 12组,组距为10

round_any函数:这个没有查到太多,本例中为计算不同组别的频数

as.numeric函数:将对象转化为数值向量

cumsum函数:累计数

paste函数:用于字符串连接,写了一篇专门的博客讲paste函数的基础用法,感觉和python的join用法相似

round函数:指定小数精度

> count<-table(round_any(myvector,10,floor))#计算不同组别的数值总数> count160 170 180 190 200 210 220 230 240 250 260 270 6 9 11 7 9 12 11 10 16 13 8 8 > count<-as.numeric(count)#得到频数的类别变量> count[1] 6 9 11 7 9 12 11 10 16 13 8 8> pcount<-prop.table(count)*100#得到百分比的类别变量> cumsump<-cumsum(pcount)#得到累计百分比的类别变量> cumsump[1] 5.00000 12.50000 21.66667 27.50000 35.00000 45.00000 54.16667 62.50000 75.83333[10] 86.66667 93.33333 100.00000> name<-paste(seq(160,270,by=10),"-",seq(170,280,by=10),sep="")#字符串连接,获取行名> name[1] "160-170" "170-180" "180-190" "190-200" "200-210"[6] "210-220" "220-230" "230-240" "240-250" "250-260"[11] "260-270" "270-280"> gt<-data.frame("频数"=count,"百分比"=pcount,"累计百分比"=cumsump,row.names=name)> round(gt,4)频数 百分比 累计百分比160-170 6 5.00005.0000170-180 9 7.5000 12.5000180-190 11 9.1667 21.6667190-200 7 5.8333 27.5000200-210 9 7.5000 35.0000210-220 12 10.0000 45.0000220-230 11 9.1667 54.1667230-240 10 8.3333 62.5000240-250 16 13.3333 75.8333250-260 13 10.8333 86.6667260-270 8 6.6667 93.3333270-280 8 6.6667 100.0000

cut函数:对数据进行分组

cut(x,beraks,right=TRUE,dig.lab=3,...)

breaks=k*(x1:x2) k为组的间隔,k*x1为下限,k*x2为上限,right为是否封闭上限。

> d<-table(cut(myvector,breaks=10*(16:28),right = FALSE))> d[160,170) [170,180) [180,190) [190,200) [200,210) [210,220) 6 9 11 7 9 12 [220,230) [230,240) [240,250) [250,260) [260,270) [270,280) 11 10 16 13 8 8 > df<-data.frame(d)> dfVar1 Freq1 [160,170) 62 [170,180) 93 [180,190) 114 [190,200) 75 [200,210) 96 [210,220) 127 [220,230) 118 [230,240) 109 [240,250) 1610 [250,260) 1311 [260,270) 812 [270,280) 8> percent<-df$Freq/sum(df$Freq)*100> cumsump<-cumsum(percent)> mytable<-data.frame(d,percent,cumsump)> mytableVar1 Freq percent cumsump1 [160,170) 6 5.000000 5.000002 [170,180) 9 7.500000 12.500003 [180,190) 11 9.166667 21.666674 [190,200) 7 5.833333 27.500005 [200,210) 9 7.500000 35.000006 [210,220) 12 10.000000 45.000007 [220,230) 11 9.166667 54.166678 [230,240) 10 8.333333 62.500009 [240,250) 16 13.333333 75.8333310 [250,260) 13 10.833333 86.6666711 [260,270) 8 6.666667 93.3333312 [270,280) 8 6.666667 100.00000

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。