【发布时间】:2017-05-31 16:49:10
【问题描述】:
我有两列 - 一个唯一 id 列 id 和旅行日期 day。我的目标是创建一个每天每个 id 的计数矩阵(并且即使计数为零也包括所有天)
> test
id day
1 3 3
2 4 4
3 1 4
4 2 3
5 2 5
6 2 4
7 1 1
8 5 4
9 1 1
10 3 2
11 2 2
12 4 2
13 2 4
14 2 5
15 4 5
16 3 4
17 5 3
18 3 2
19 5 5
20 3 4
21 1 3
22 2 3
23 2 5
24 5 2
25 3 2
输出应该如下,其中行代表id,列代表day:
> output
1 2 3 4 5
1 2 0 1 1 0
2 0 1 2 2 3
3 0 3 1 2 0
4 0 1 0 1 1
5 0 1 1 1 1
我已尝试使用 reshape 包进行以下操作
output <- reshape2::dcast(test, day ~ id, sum)
但它会引发以下错误:
Error in unique.default(x) : unique() applies only to vectors
为什么会发生这种情况?正确的解决方案是在dplyr 或使用基础 R 中?任何提示将不胜感激。
这是数据:
> dput(test)
structure(list(id = c(3, 4, 1, 2, 2, 2, 1, 5, 1, 3, 2, 4, 2,
2, 4, 3, 5, 3, 5, 3, 1, 2, 2, 5, 3), day = c(3, 4, 4, 3, 5, 4,
1, 4, 1, 2, 2, 2, 4, 5, 5, 4, 3, 2, 5, 4, 3, 3, 5, 2, 2)), .Names = c("id",
"day"), row.names = c(NA, -25L), class = "data.frame")
【问题讨论】:
-
table(d)应该会给你你想要的输出。 -
这肯定是重复的。