2017-07-24 72 views
0

我新至R组通过随后只选择行,如果它在一个特定列的值小于其值从同一列

我有一个数据帧[1390 * 6],其中最后一个变量是排名。

enter image description here

所以想由“ID”到GROUP_BY,则忽略该特定“ID”,其秩比的“15001”较高-highlighted行[数据集的示例]黄色。

这是我到目前为止已经试过:

SS3<-SS1 %>% group_by(ID) %>% filter(any(DC== 15001) & any(SS1$rank <SS1$rank[DC== 15001])) 

[预期结果]

enter image description here

+0

欢迎SO。请看看[如何提出一个很好的重现R问题](https://stackoverflow.com/q/5963269/3250126)。分享你的数据(**不是**图片,而是使用'dput()')的明文和你已经试过的代码。 – loki

+0

group_by是什么意思?因为在你预期的结果中,我只是看到你订购了它? –

+0

对于给定的“ID”,我有很多条目。所以我想忽略那些等级高于“15001”的特定“ID”的行 - 用黄色突出显示。 –

回答

0

例,它类似于您所提供的数据,有需要的只是相关行的操作。

set.seed(1) 
df <- data.frame(ID=c(rep(2122051,20),rep(2122052,20)), 
       DC=as.integer(runif(40)*100), 
       rank=rep(1:20,2), 
       stringsAsFactors=F) 
df$DC[c(10,30)] <- as.integer(15001) 

我存储每个位置的rank -1,其中DC==15001作为载体

positions <- df$rank[df$DC==15001] 
[1] 9 9 

我用tidyversemap2这应该与自己的数据(给你出什么)工作存储rank小于每个组的positions中指定的条目。

library(tidyverse) 
df1 <- df %>% 
      group_by(ID) %>% 
      nest() %>% 
      mutate(data = map2(data, 1:length(unique(df$ID)), ~head(.x,positions[.y]))) %>% 
      unnest(data) 

输出

 ID DC rank 
1 2122051 26  1 
2 2122051 37  2 
3 2122051 57  3 
4 2122051 90  4 
5 2122051 20  5 
6 2122051 89  6 
7 2122051 94  7 
8 2122051 66  8 
9 2122051 62  9 
10 2122051 15001 10 
11 2122052 93  1 
12 2122052 21  2 
13 2122052 65  3 
14 2122052 12  4 
15 2122052 26  5 
16 2122052 38  6 
17 2122052  1  7 
18 2122052 38  8 
19 2122052 86  9 
20 2122052 15001 10 
+0

感谢您指出这一点......我编辑了我的答案。 – CPak

+0

已根据特定ID的修复日期生成排名。 @智白 –

+0

??你是否期待不同的输出? – CPak

相关问题