按组保留列中值第一次出现之前的行。允许没有值的组
Retain rows up to first occurrence of a value in a column, by group. Groups without value allowed
我有这样一个数据框:
> df
id type
1 1 a
2 1 a
3 1 b
4 1 a
5 1 b
6 2 a
7 2 a
8 2 b
9 3 a
10 3 a
我想保留每个组 (id) 的所有行,直到类型列中第一次出现值 'b'。对于没有类型 'b' 的组,我想保留它们的所有行。
生成的数据框应如下所示:
> dfnew
id type
1 1 a
2 1 a
3 1 b
4 2 a
5 2 a
6 2 b
7 3 a
8 3 a
我尝试了以下代码,但它保留了除第一次出现的 'b' 之外具有值 'a' 的其他行,并且仅排除了额外出现的 'b',这是不是我想要的。请看下面的第 4 行。我想摆脱它。
> df %>% group_by(id) %>% filter(cumsum(type == 'b') <= 1)
Source: local data frame [7 x 2]
Groups: id
id type
1 1 a
2 1 a
3 1 b
4 1 a
5 2 a
6 2 a
7 2 b
8 3 a
9 3 a
您可以将 match
或 which
与 slice
或(如@Richard 所述)which.max
结合使用
library(dplyr)
df %>%
group_by(id) %>%
slice(if(any(type == "b")) 1:which.max(type == "b") else row_number())
# Source: local data table [8 x 2]
# Groups: id
#
# id type
# 1 1 a
# 2 1 a
# 3 1 b
# 4 2 a
# 5 2 a
# 6 2 b
# 7 3 a
# 8 3 a
或者您可以尝试 data.table
library(data.table)
setDT(df)[, if(any(type == "b")) .SD[1:which.max(type == "b")] else .SD, by = id]
# id type
# 1: 1 a
# 2: 1 a
# 3: 1 b
# 4: 2 a
# 5: 2 a
# 6: 2 b
# 7: 3 a
# 8: 3 a
我有这样一个数据框:
> df
id type
1 1 a
2 1 a
3 1 b
4 1 a
5 1 b
6 2 a
7 2 a
8 2 b
9 3 a
10 3 a
我想保留每个组 (id) 的所有行,直到类型列中第一次出现值 'b'。对于没有类型 'b' 的组,我想保留它们的所有行。
生成的数据框应如下所示:
> dfnew
id type
1 1 a
2 1 a
3 1 b
4 2 a
5 2 a
6 2 b
7 3 a
8 3 a
我尝试了以下代码,但它保留了除第一次出现的 'b' 之外具有值 'a' 的其他行,并且仅排除了额外出现的 'b',这是不是我想要的。请看下面的第 4 行。我想摆脱它。
> df %>% group_by(id) %>% filter(cumsum(type == 'b') <= 1)
Source: local data frame [7 x 2]
Groups: id
id type
1 1 a
2 1 a
3 1 b
4 1 a
5 2 a
6 2 a
7 2 b
8 3 a
9 3 a
您可以将 match
或 which
与 slice
或(如@Richard 所述)which.max
library(dplyr)
df %>%
group_by(id) %>%
slice(if(any(type == "b")) 1:which.max(type == "b") else row_number())
# Source: local data table [8 x 2]
# Groups: id
#
# id type
# 1 1 a
# 2 1 a
# 3 1 b
# 4 2 a
# 5 2 a
# 6 2 b
# 7 3 a
# 8 3 a
或者您可以尝试 data.table
library(data.table)
setDT(df)[, if(any(type == "b")) .SD[1:which.max(type == "b")] else .SD, by = id]
# id type
# 1: 1 a
# 2: 1 a
# 3: 1 b
# 4: 2 a
# 5: 2 a
# 6: 2 b
# 7: 3 a
# 8: 3 a