频率计数基于两列

时间:2016-04-23 11:48:09

标签: r

我知道在基于两列获取频率计数方面已经发布了很多,并且它在某种程度上对我有用 - 除了它采用我的一个变量并将这些值变为行数这一事实。我想只有“正常”的行号,并将这两个变量作为数据帧中的特征。

数据示例如下所示:

sport        cell
football     A1
tennis       A2
tennis       A1
gym          A3

我想要达到的是每个细胞的运动次数:

    cell    tennis    football    gym
1   A1      1         1           0
2   A2      1         0           0
3   A3      0         0           1

使用以下代码,它将单元格特征变为行名称:

data.frame(table(data$cell, data$sport)[,]) 

        tennis    football    gym
A1      1         1           0
A2      1         0           0
A3      0         0           1

另外,我尝试为每一行分配数字,并按如下方式列出三个功能:

data.frame(table(data$cell, data$sport, data$rownumber)[,]) 

但这只是给了我一个错误。

任何帮助都将受到高度赞赏!

1 个答案:

答案 0 :(得分:3)

您还可以使用dcast包中的reshape2函数来获得所需的结果:

library(reshape2)
dat.new <- dcast(dat, cell ~ sport, fun.aggregate = length)

这将导致以下数据帧:

> dat.new
  cell football gym tennis
1   A1        1   0      1
2   A2        0   0      1
3   A3        0   1      0

dcast包中还提供了扩展和优化的data.table功能。

dplyr / tidyr替代方案:

library(dplyr)
library(tidyr)

dat.new <- dat %>%
  group_by(cell, sport) %>%
  tally() %>%
  spread(sport, n, fill = 0)

给你相同的结果。