首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >R中分组变量的范畴变量表

R中分组变量的范畴变量表
EN

Stack Overflow用户
提问于 2017-07-27 14:58:33
回答 2查看 3.7K关注 0票数 0

我有一个包含一些分类变量+一个“集群”变量的数据集。例如:

代码语言:javascript
运行
复制
time <- c("Morning", "Evening" ,"Morning", "Morning", "Afternoon", "Evening", "Afternoon")
dollar <- c("1-5", "6-10", "11-15", "1-5", "1-5", "6-10", "6-10")
with_kids <- c("no", "yes", "yes", "no", "no", "yes", "yes")
cluster <- c(1,1,2,3,2,2,3)

data <- cbind(time, dollar, with_kids, cluster)

如何通过“集群”创建所有类别变量的频率表?

期望的输出是右边的表(每个集群中每个分类变量的列%)。

我知道这段代码只适用于一个变量。如果我有更多的绝对变量,那么最有效的方法是什么?

代码语言:javascript
运行
复制
table(data$time, data$cluster)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-27 15:41:42

我不完全确定你想要的输出,但这里有两种可能性。

表表清单:

代码语言:javascript
运行
复制
myList <- lapply(dat[head(names(dat), -1)], table, dat$cluster)
myList
$time

            1 2 3
  Afternoon 0 1 1
  Evening   1 1 0
  Morning   1 1 1

$dollar

        1 2 3
  1-5   1 1 1
  11-15 0 1 0
  6-10  1 1 1

$with_kids

      1 2 3
  no  1 1 1
  yes 1 2 1

要获得比例表的列表,可以使用lapply作为函数对表列表进行prop.table,并向其提供margin=2

代码语言:javascript
运行
复制
lapply(myList, prop.table, margin=2)
$time

                    1         2         3
  Afternoon 0.0000000 0.3333333 0.5000000
  Evening   0.5000000 0.3333333 0.0000000
  Morning   0.5000000 0.3333333 0.5000000

$dollar

                1         2         3
  1-5   0.5000000 0.3333333 0.5000000
  11-15 0.0000000 0.3333333 0.0000000
  6-10  0.5000000 0.3333333 0.5000000

$with_kids

              1         2         3
  no  0.5000000 0.3333333 0.5000000
  yes 0.5000000 0.6666667 0.5000000

把他们重新绑在一起

代码语言:javascript
运行
复制
do.call(rbind, lapply(dat[head(names(dat), -1)], table, dat$cluster))
          1 2 3
Afternoon 0 1 1
Evening   1 1 0
Morning   1 1 1
1-5       1 1 1
11-15     0 1 0
6-10      1 1 1
no        1 1 1
yes       1 2 1

数据

代码语言:javascript
运行
复制
dat <- 
structure(list(time = structure(c(3L, 2L, 3L, 3L, 1L, 2L, 1L), .Label = c("Afternoon", 
"Evening", "Morning"), class = "factor"), dollar = structure(c(1L, 
3L, 2L, 1L, 1L, 3L, 3L), .Label = c("1-5", "11-15", "6-10"), class = "factor"), 
    with_kids = structure(c(1L, 2L, 2L, 1L, 1L, 2L, 2L), .Label = c("no", 
    "yes"), class = "factor"), cluster = c(1, 1, 2, 3, 2, 2, 
    3)), .Names = c("time", "dollar", "with_kids", "cluster"), row.names = c(NA, 
-7L), class = "data.frame")
票数 1
EN

Stack Overflow用户

发布于 2017-07-27 15:08:43

代码语言:javascript
运行
复制
time <- c("Morning", "Evening" ,"Morning", "Morning", "Afternoon", "Evening", "Afternoon")
dollar <- c("1-5", "6-10", "11-15", "1-5", "1-5", "6-10", "6-10")
with_kids <- c("no", "yes", "yes", "no", "no", "yes", "yes")
cluster <- c(1,1,2,3,2,2,3)
data <- data.frame(time, dollar, with_kids, cluster)

您可以使用dplyr包并选择任意数量的变量。

代码语言:javascript
运行
复制
library(dplyr)
data %>% 
  group_by(interaction(time, cluster, dollar)) %>% 
  summarise(count = n())

# A tibble: 7 x 2
  `interaction(time, cluster, dollar)` count
                                <fctr> <int>
1                        Morning.1.1-5     1
2                      Afternoon.2.1-5     1
3                        Morning.3.1-5     1
4                      Morning.2.11-15     1
5                       Evening.1.6-10     1
6                       Evening.2.6-10     1
7                     Afternoon.3.6-10     1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45354436

复制
相关文章

相似问题

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