首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R: data.table中的聚合和重用变量

R: data.table中的聚合和重用变量
EN

Stack Overflow用户
提问于 2016-11-11 16:16:42
回答 1查看 102关注 0票数 1

我有一个data.table,我想总结一下。看起来是这样:

代码语言:javascript
复制
> DF
          new_src action
 1: cdn.adnxs.com      1
 2: cdn.adnxs.com      1
 3: cdn.adnxs.com      1
 4: cdn.adnxs.com      3
 5:   s1.2mdn.net      1
 6: cdn.adnxs.com      3
 7: cdn.adnxs.com      3
 8: cdn.adnxs.com      3
 9: cdn.adnxs.com      3
10: cdn.adnxs.com      3

我要用new_src聚合,用action找到最高的发生率,计算频率,打印这个action,打印总数。我可以在ddply中使用table并在ddply中重用变量,这样就不需要多次运行table了。我需要在data.table中这样做,但是我不能重用table结果,我必须运行table两次。

举例说明。这样做是可行的:

代码语言:javascript
复制
DF = structure(list(new_src = c("cdn.adnxs.com", "cdn.adnxs.com", 
                                "cdn.adnxs.com", "cdn.adnxs.com", "s1.2mdn.net", "cdn.adnxs.com", 
                                "cdn.adnxs.com", "cdn.adnxs.com", "cdn.adnxs.com", "cdn.adnxs.com"), action = c("1", "1", "1", "3", "1", "3", "3", "3", "3", "3")), .Names = c("new_src", "action"), class = c("data.table", "data.frame"), row.names = c(NA, -10L))

dt = DF[1:10,by=list(new_src),list(tb = sort(table(action),decreasing=T)[1], nm = names(sort(table(action),decreasing=T)[1]),tot = .N)]
View(dt)

ddpl = ddply(DF,.(new_src),summarize,tb = sort(table(action),decreasing=T)[1], nm = names(tb), tot = length(new_src))
View(ddpl)

这不可能。

代码语言:javascript
复制
dt = DF[1:10,by=list(new_src),list(tb = sort(table(action),decreasing=T)[1], nm = names(tb),tot = .N)]

有可能用data.table吗?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-11 16:21:18

我想你想让.N在这里:

代码语言:javascript
复制
DF[, .N, by=.(new_src, action)][
  order(-N), .(topv = action[1], topn = N[1], n = sum(N)), by=new_src]

         new_src topv topn n
1: cdn.adnxs.com    3    6 9
2:   s1.2mdn.net    1    1 1

若要处理关系,请向order(-N, ...)添加更多参数。

嵌套不是链接by=,而是另一种选择:

代码语言:javascript
复制
DF[, .SD[, .N, by=action][order(-N), c(.SD[1], .(totn = sum(.N)))], by=new_src]

         new_src action N totn
1: cdn.adnxs.com      3 6    2
2:   s1.2mdn.net      1 1    1

不过,我发现很难理解;而且由于 is optimized,它可能会慢一些。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40552051

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档