通过mutliple变量在数据框架上使用表格

时间:2015-11-04 04:54:32

标签: r reshape

我有一个“长”格式的数据表,其中包含每个唯一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中表现不佳(使用迭代循环来查看每个唯一日期内找到的位置)。我希望重塑,应用,聚合,或者也许另一个包可能更有帮助。我已经浏览了一些其他的重塑指南,但我仍然有点坚持这样做的聪明方法。

2 个答案:

答案 0 :(得分:5)

通过它的声音,你应该能够做你需要的事情:

table(unique(dfTest)[-2])
##    loc
## id  X Y Z
##   1 2 0 0
##   2 1 1 1

答案 1 :(得分:1)

我们可以按“loc”,“id”进行分组,获取“date”的lengthunique元素,并使用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