通过多个变量在数据帧上使用 Table

Using Table on data frame by mutliple variables

我有一个 table 格式的数据 "long",每个唯一 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)  

创建样本 table。

  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

我的目标是创建一个看起来像这样的 table。

id   X   Y   Z
1    2   0   0
2    1   1   1

我想看看某个地点被访问了多少次。 ID#1 在 A 天和 B 天访问了 X,总共有 2 次独立访问。我使用 reshape 来解决这个问题,想把它变成 "wide" 格式。但是,我不知道如何考虑第二个变量(日期)。我试图提取在特定日期访问每个位置的次数。否则实际日期本身并不重要,只是它标识重复条目。

我当前的解决方案在 R 中的形式很差(使用迭代循环查看在每个唯一日期内找到的位置)。我希望重塑、应用、聚合,或者另一个包可能会有更多帮助。我已经浏览了一堆其他重塑指南,但我仍然对执行此操作的巧妙方法有些困惑。

我们可以按'loc'、'id'分组,得到'date'的unique个元素的length,用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

根据它的声音,您应该能够做您需要的事情:

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