首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在data.table (r语言)中聚合具有2列的数据

在data.table (r语言)中聚合具有2列的数据
EN

Stack Overflow用户
提问于 2016-08-08 18:47:10
回答 3查看 59关注 0票数 1

我有我的表(输入):

代码语言:javascript
复制
date         directorName      companyName  rank
2015-08-01   Sergey            vino          29
2015-08-02   Sergey            vino          42
2015-08-09   Sergey            vino          25
2015-08-04   Sergey            vino          27
2015-08-05   Mike              bolder        29
2015-08-01   Mike              bolder        27
2015-08-11   Mike              bolder        23
2015-08-09   Mike              bolder        30
2015-08-09   Jay               bolder        2
2015-08-10   Jay               bolder        10
2015-08-11   Jay               bolder        31

输出:前10名我想知道directorNamerank中达到了前30名,但从companyName中从未达到前10名。

代码语言:javascript
复制
    date         directorName      companyName  rank
    2015-08-01   Sergey            vino          29
    2015-08-02   Sergey            vino          42
    2015-08-09   Sergey            vino          25
    2015-08-04   Sergey            vino          27

感谢您的帮助!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-08-08 19:22:00

我们可以使用data.table在两个步骤的过程中尝试。将'data.frame‘转换为' Data.table’(setDT(df1)),按'companyName‘进行分组,if all’companyName‘大于10我们子集Data.table (.SD) (在当前示例中,这给出了预期的输出)。在第二步中,我们按“目录名”分组,检查“if”的any元素是否大于30,然后再次进行子集。

代码语言:javascript
复制
library(data.table)
setDT(df1)[, if(all(rank > 10)) .SD, companyName][, if(any(rank >30)) .SD , directorName]

#   companyName       date directorName rank
#1:        vino 2015-08-01       Sergey   29
#2:        vino 2015-08-02       Sergey   42
#3:        vino 2015-08-09       Sergey   25
#4:        vino 2015-08-04       Sergey   27
票数 1
EN

Stack Overflow用户

发布于 2016-08-08 19:09:26

假设原始数据在一个名为DT的数据表中:

代码语言:javascript
复制
library(data.table)
output <- DT[ rank > 10 & rank <= 30, ]
票数 0
EN

Stack Overflow用户

发布于 2016-08-08 19:14:27

第一个命令查找所有从未进入前10名的公司:

代码语言:javascript
复制
library(dplyr)
df %>% group_by(companyName) %>% 
    summarise(min = min(rank)) %>% 
    filter(min > 10) %>% select(companyName) -> tt

第二个选择了前30名中的导演。unique的存在只是为了避免重复:

代码语言:javascript
复制
unique(df$directorName[df$companyName %in% tt$companyName & df$rank < 30])

输出:

代码语言:javascript
复制
"Sergey"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38827207

复制
相关文章

相似问题

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