我有一个“长”格式的数据表,其中包含每个唯一ID的许多条目。例如......
id <- c(1,1,1,2,2,2)
date <- c("A","A","B","C","C","C")
loc <- c("X", "X", "X", "X","Y","Z")
dfTest <- data.frame(id,date,loc)
创建样本表。
id date loc
1 1 A X
2 1 A X
3 1 B X
4 2 C X
5 2 C Y
6 2 C Z
我的目标是创建一个看起来像这样的表。
id X Y Z
1 2 0 0
2 1 1 1
我想看看一个位置被唯一访问过多少次。 ID#1在第A天和第B天访问了X,总访问次数达到了2次。我使用reshape来解决这个问题,并考虑将其转换为“宽”格式。但是,我不知道如何考虑第二个变量(日期)。我试图在唯一日期提取每个位置的访问次数。实际日期本身无关紧要,只是它识别重复的条目。
我目前的解决方案在R中表现不佳(使用迭代循环来查看每个唯一日期内找到的位置)。我希望重塑,应用,聚合,或者也许另一个包可能更有帮助。我已经浏览了一些其他的重塑指南,但我仍然有点坚持这样做的聪明方法。
答案 0 :(得分:5)
通过它的声音,你应该能够做你需要的事情:
table(unique(dfTest)[-2])
## loc
## id X Y Z
## 1 2 0 0
## 2 1 1 1
答案 1 :(得分:1)
我们可以按“loc”,“id”进行分组,获取“date”的length
个unique
元素,并使用dcast
来获得预期的输出。
library(data.table)#v1.9.6+
dcast(setDT(dfTest)[, uniqueN(date), .(loc, id)], id~loc, value.var='V1', fill=0)
# id X Y Z
#1: 1 2 0 0
#2: 2 1 1 1