r - 提取一列中具有满足另一列中给定条件的重复条目的行

标签 r dataframe dplyr duplicates

我有一个示例数据框,在下面给出的第一列中包含重复的条目:

df <- data.frame(ID=c(rep(101,3),rep(102,2),103,rep(104,3)),Type=c(2,1,1,1,2,1,3,1,2),sex=c(0,0,0,1,1,1,0,0,0))
df
  ID Type sex
1 101    2   0
2 101    1   0
3 101    1   0
4 102    1   1
5 102    2   1
6 103    1   1
7 104    3   0
8 104    1   0
9 104    2   0

问题:对于每个变量“ID”,我希望行从变量“Type”第一次出现为 1(即 Type=1)的位置开始。

我知道对于每个 ID,使用以下代码满足条件 Type=1 的位置:

aggregate(df$Type,list(ID=df$ID),function(x) match(1,x))
 ID x
1 101 2
2 102 1
3 103 1
4 104 2

但是我还没能解决这个问题。

所需输出:输出应如下所示:

df.result <- data.frame(ID=c(101,101,102,102,103,104,104),Type=c(1,1,1,2,1,1,2),sex=c(0,0,1,1,1,0,0))
df.result
 ID Type sex
1 101    1   0
2 101    1   0
3 102    1   1
4 102    2   1
5 103    1   1
6 104    1   0
7 104    2   0

谢谢!

最佳答案

我们可以将matchslice结合使用

library(dplyr)
df %>% group_by(ID) %>% slice(match(1, Type) : n())

#    ID  Type   sex
#  <dbl> <dbl> <dbl>
#1   101     1     0
#2   101     1     0
#3   102     1     1
#4   102     2     1
#5   103     1     1
#6   104     1     0
#7   104     2     0

或者使用过滤器

df %>% group_by(ID) %>% filter(row_number() >= match(1, Type))

在基础 R 中,我们可以使用 ave ,例如:

subset(df, as.logical(ave(Type, ID, FUN = function(x) seq_along(x) >= match(1, x))))

关于r - 提取一列中具有满足另一列中给定条件的重复条目的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60258721/

相关文章:

r - fread(R 中的 data.table)以及编码规范

r - 更新R中嵌套循环中的列表

r - 基于自定义向量订购数据框

python - 如何在 Pandas 数据框中以分组格式创建字典?

r - dplyr 根据订单条件和 if 语句进行汇总

r - 使用 group_by 过滤特定案例,同时保留 NA

r - 测试软件QuickCheck有R接口(interface)吗?

r - R 输出中的 dist() 函数

为数据框中的组运行线性模型并将输出存储在 R 中的数据框中

r - 按组递增