我有我的表(输入):
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名我想知道directorName在rank中达到了前30名,但从companyName中从未达到前10名。
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感谢您的帮助!
发布于 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,然后再次进行子集。
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发布于 2016-08-08 19:09:26
假设原始数据在一个名为DT的数据表中:
library(data.table)
output <- DT[ rank > 10 & rank <= 30, ]发布于 2016-08-08 19:14:27
第一个命令查找所有从未进入前10名的公司:
library(dplyr)
df %>% group_by(companyName) %>%
summarise(min = min(rank)) %>%
filter(min > 10) %>% select(companyName) -> tt第二个选择了前30名中的导演。unique的存在只是为了避免重复:
unique(df$directorName[df$companyName %in% tt$companyName & df$rank < 30])输出:
"Sergey"https://stackoverflow.com/questions/38827207
复制相似问题