我是R的新手
我有一个数据框[1390 * 6],其中最后一个变量是等级。
[数据集示例]
所以我想通过“ID”分组,然后忽略特定“ID”的行,其等级高于“15001” - 以黄色突出显示。
这是我到目前为止所尝试的:
SS3<-SS1 %>% group_by(ID) %>% filter(any(DC== 15001) & any(SS1$rank <SS1$rank[DC== 15001]))
[预期结果]
答案 0 :(得分: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
我使用tidyverse
map2
来存储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