根据值减少数据集

ECI*_*CII 3 r dataframe

我有一个数据集

dtf<-data.frame(id=c("A","A","A","A","B","B","B","B"), value=c(2,4,6,8,4,6,8,10))
Run Code Online (Sandbox Code Playgroud)

对于每个id,值按升序排序

我想减少dtf,使每个id值超过指定限制时只包含第一行.每个只有一行id,并且应该是value第一行超过指定限制的行.

对于此示例,对于5dtf 的限制应减少为:

A 6
B 6
Run Code Online (Sandbox Code Playgroud)

这是一个很好的方法吗?

非常感谢

Sve*_*ein 5

它可以通过以下方式完成aggregate:

dtf<-data.frame(id=c("A","A","A","A","B","B","B","B"), value=c(2,4,6,8,4,6,8,10))

limit <- 5

aggregate(value ~ id, dtf, function(x) x[x > limit][1])
Run Code Online (Sandbox Code Playgroud)

结果:

  id value
1  A     6
2  B     6
Run Code Online (Sandbox Code Playgroud)

更新:多列的解决方案:

示例数据框,dtf2:

dtf2 <- data.frame(id=c("A","A","A","A","B","B","B","B"), 
                   value=c(2,4,6,8,4,6,8,10),
                   col3 = letters[1:8],
                   col4 = 1:8)
Run Code Online (Sandbox Code Playgroud)

解决方案包括ave:

with(dtf2, dtf2[ave(value, id, FUN = function(x) cumsum(x > limit)) == 1, ])
Run Code Online (Sandbox Code Playgroud)

结果:

  id value col3 col4
3  A     6    c    3
6  B     6    f    6
Run Code Online (Sandbox Code Playgroud)