我知道在基于两列获取频率计数方面已经发布了很多,并且它在某种程度上对我有用 - 除了它采用我的一个变量并将这些值变为行数这一事实。我想只有“正常”的行号,并将这两个变量作为数据帧中的特征。
数据示例如下所示:
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)[,])
但这只是给了我一个错误。
任何帮助都将受到高度赞赏!
答案 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)
给你相同的结果。