我有一个事件记录的 data.table
,记录用户ID、居住国家和事件。例如:
dt <- data.table(user=c(rep(3, 5), rep(4, 5)),
country=c(rep(1,4),rep(2,6)),
event=1:10, key="user")
如您所见,数据有些损坏:事件5报告用户3在国家2(或者他旅行了-这对我来说无关紧要)。
因此当我试图汇总数据时:
dt[, country[.N] , by=user]
user V1
1: 3 2
2: 4 2
我得到了用户3的错误国家信息。 理想情况下,我希望能够获取用户最常访问的国家以及他在那里度过的时间百分比:
user country support
1: 3 1 0.8
2: 4 2 1.0
我该如何做到这一点?
实际数据有约10^7行,因此解决方案必须能够扩展(这就是为什么我使用data.table
而不是data.frame
的原因)。
table
上。现在在我的笔记本上,对于 1e6 行数据表,运行时间不到 1 秒。将来,了解您的问题的实际大小会很有用。named vector
是一条消息,通常不会对性能产生太大影响。您可以检查一下。我已经在这里删除了名称。如果您能花些功夫找到缓慢的问题并报告回来,而不仅仅是说“非常慢”,那就太好了。 - Arun