为了账号安全,请及时绑定邮箱和手机立即绑定

将计数转换为长格式到宽格式的简单方法

将计数转换为长格式到宽格式的简单方法

Qyouu 2019-10-22 21:56:55
我有以下数据集:sample.data <- data.frame(Step = c(1,2,3,4,1,2,1,2,3,1,1),                          Case = c(1,1,1,1,2,2,3,3,3,4,5),                          Decision = c("Referred","Referred","Referred","Approved","Referred","Declined","Referred","Referred","Declined","Approved","Declined"))sample.data   Step Case Decision1     1    1 Referred2     2    1 Referred3     3    1 Referred4     4    1 Approved5     1    2 Referred6     2    2 Declined7     1    3 Referred8     2    3 Referred9     3    3 Declined10    1    4 Approved11    1    5 DeclinedR中是否可以将其转换为宽表格式,并在标头上做出决定,并且每个单元格的值就是出现次数,例如:Case    Referred    Approved    Declined1          3           1            02          1           0            13          2           0            14          0           1            05          0           0            1
查看完整描述

3 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

您可以使用简单的table()语句来完成此操作。您可以通过设置因子水平来获得所需的响应。


sample.data$Decision <- factor(x = sample.data$Decision,

                               levels = c("Referred","Approved","Declined"))


table(Case = sample.data$Case,sample.data$Decision)


Case Referred Approved Declined

   1        3        1        0

   2        1        0        1

   3        2        0        1

   4        0        1        0

   5        0        0        1


查看完整回答
反对 回复 2019-10-22
?
四季花海

TA贡献1811条经验 获得超5个赞

-package dcast函数中的聚合参数reshape2默认为length(= count)。在data.table-package中,dcast实现了该函数的改进版本。因此,在您的情况下,这将是:


library('reshape2') # or library('data.table')

newdf <- dcast(sample.data, Case ~ Decision)

或显式使用参数:


newdf <- dcast(sample.data, Case ~ Decision,

               value.var = "Decision", fun.aggregate = length)

这给出了以下数据框:


> newdf

  Case Approved Declined Referred

1    1        1        0        3

2    2        0        1        1

3    3        0        1        2

4    4        1        0        0

5    5        0        1        0

如果未指定聚合函数,则会收到一条警告,告知您dcast正在使用它lenght作为默认值。


查看完整回答
反对 回复 2019-10-22
?
万千封印

TA贡献1891条经验 获得超3个赞

这是dplyr + tidyr方法:


if (!require("pacman")) install.packages("pacman")

pacman::p_load(dplyr, tidyr)


sample.data %>%

    count(Case, Decision) %>%

    spread(Decision, n, fill = 0)


##    Case Approved Declined Referred

##   (dbl)    (dbl)    (dbl)    (dbl)

## 1     1        1        0        3

## 2     2        0        1        1

## 3     3        0        1        2

## 4     4        1        0        0

## 5     5        0        1        0


查看完整回答
反对 回复 2019-10-22
  • 3 回答
  • 0 关注
  • 613 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信