R 多变量在数据帧上使用表

R 多变量在数据帧上使用表,r,reshape,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 X Y Z 1 2 0 0 2 1 1 1 我想知道一个地点被

我有一个“长”格式的数据表,包含每个唯一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   X   Y   Z
1    2   0   0
2    1   1   1
我想知道一个地点被访问了多少次。ID#1在A天和B天访问了X,总共进行了2次独特访问。我用重塑来处理这个问题,想把它变成一个“宽”的格式。但是,我不知道如何考虑第二个变量(日期)。我正试图找出在特定日期访问每个地点的次数。除此之外,实际日期本身并不重要,只是它标识了重复的条目


我目前的解决方案在R中的形式很差(使用迭代循环查看每个唯一日期内找到的位置)。我希望重塑、应用、聚合,或者另一个方案可能会更有帮助。我已经浏览了很多其他的重塑指南,但我仍然有点迷恋这样做的巧妙方法。

我们可以按“loc”、“id”分组,获得“date”的
唯一
元素的
长度
,并使用
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

我们可以按“loc”、“id”分组,获得“date”元素的
唯一
长度
,并使用
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

听上去,你应该能够做你需要的事情:

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

你是在找
表(unique(dfTest)[-2])
吗?那太好了,我是R的新手,我觉得我在努力工作。谢谢。你是在找
表(unique(dfTest)[-2])
吗?那太好了,我是R的新手,我觉得我在努力工作。谢谢。我也会试试看-我正在处理的文件大约有300k个条目,所以可能会运行得更快。@asshah4来自
data.table
dcast
非常快。我也会试试看-我正在处理的文件大约有300k个条目,所以这可能会运行得更快。@asshah4来自
data.table
dcast
非常快。