首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用R创建表摘要

使用R创建表摘要
EN

Stack Overflow用户
提问于 2018-10-01 03:54:36
回答 2查看 77关注 0票数 2

我有一个包含2列的数据集,如下所示。我想要做的是绘制一个表摘要,其中行作为组(1-5,6-10,11-15,16-20),列作为yes和no的%。没有代码,因为我不知道如何开始。但我有数据集。

代码语言:javascript
复制
Col 1   Col 2
 1       Yes
 2       No
 3       Yes
 4       No
 5       No
 6       No
 7       Yes
 8       Yes
 9       Yes
10       No
12       Yes
14       No
16       No
18       No
20       Yes
EN

回答 2

Stack Overflow用户

发布于 2018-10-01 04:22:53

基础R解决方案可以增强cutaggregate

代码语言:javascript
复制
f <- cut(dat$Col.1, c(1, 6, 11, 16, 21, Inf),
         include.lowest = TRUE, right = FALSE)
agg <- aggregate(Col.2 ~ f, dat, table)
agg <- cbind(agg[1], agg[[2]])
agg[2:3] <- 100*agg[2:3]/rowSums(agg[2:3])

agg
#        f       No      Yes
#1   [1,6) 60.00000 40.00000
#2  [6,11) 40.00000 60.00000
#3 [11,16) 50.00000 50.00000
#4 [16,21) 66.66667 33.33333

数据。

代码语言:javascript
复制
dat <-
structure(list(Col.1 = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 
10L, 12L, 14L, 16L, 18L, 20L), Col.2 = structure(c(2L, 1L, 2L, 
1L, 1L, 1L, 2L, 2L, 2L, 1L, 2L, 1L, 1L, 1L, 2L), .Label = c("No", 
"Yes"), class = "factor")), class = "data.frame", row.names = c(NA, 
-15L))
票数 1
EN

Stack Overflow用户

发布于 2018-10-01 04:23:21

1)仅使用基数R和末尾注释中的DF

代码语言:javascript
复制
nr <- nrow(DF)
group <- 5 * ceiling(DF$Col1 / 5)
100 * prop.table(xtabs(~ group + Col2, DF), 1)

给予:

代码语言:javascript
复制
     Col2
group       No      Yes
   5  60.00000 40.00000
   10 40.00000 60.00000
   15 50.00000 50.00000
   20 66.66667 33.33333

2)或使用更花哨的组标签尝试这种方法,可以得到比其他一些方法更好的标签:

代码语言:javascript
复制
nr <- nrow(DF)

g <- 5 * ceiling(DF$Col1 / 5) # from above
labels <- unique(paste0(g-4, "-", g))
group <- factor(g, labels = labels)

tab <- 100 * prop.table(xtabs(~ group + Col2, DF), 1)

给予:

代码语言:javascript
复制
> tab
       Col2
group         No      Yes
  1-5   60.00000 40.00000
  6-10  40.00000 60.00000
  11-15 50.00000 50.00000
  16-20 66.66667 33.33333

> # another layout
> ftable(tab, row.vars = 1:2)

group Col2          
1-5   No    60.00000
      Yes   40.00000
6-10  No    40.00000
      Yes   60.00000
11-15 No    50.00000
      Yes   50.00000
16-20 No    66.66667
      Yes   33.33333

> plot(tab, col = c("pink", "lightgreen"))

备注

可重现形式的输入DF为:

代码语言:javascript
复制
Lines <- "Col1   Col2
 1       Yes
 2       No
 3       Yes
 4       No
 5       No
 6       No
 7       Yes
 8       Yes
 9       Yes
10       No
12       Yes
14       No
16       No
18       No
20       Yes"
DF <- read.table(text = Lines, header = TRUE)

更新

修改了几次。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52581598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档