根据值减少数据集

标签 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))

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

我想减少 dtf 以仅包含每个 id 的第一行该值超过指定的限制。每个 id 只有一行, 那应该是 value首先超过指定的限制。

对于此示例和 5 的限制dtf 应该减少到:
A 6
B 6

这是一个很好的方法吗?

非常感谢

最佳答案

可以用 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])

结果:
  id value
1  A     6
2  B     6

更新:多列的解决方案:

示例数据框,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)

一个解决方案包括ave :
with(dtf2, dtf2[ave(value, id, FUN = function(x) cumsum(x > limit)) == 1, ])

结果:
  id value col3 col4
3  A     6    c    3
6  B     6    f    6

关于根据值减少数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14005282/

相关文章:

r - 排除值在另一行中使用的行

python - 更改 pandas 中的行

string - R中用空格分割不均匀字符串

使用插入符号训练函数的 R 随机森林交叉验证不会产生与手动完成时相同的准确性

r - 如何将我的列表列表转换为可用的 data.frame(用于打印表格)?

R:来自 sqldf 的 read.csv.sql 能够成功读取一个 csv,但不能成功读取另一个 csv

python - 如何在 Dataframe 中保存排序顺序?

r - 从数据框中的奇数列中减去偶数列

r - 新安装的 RStudio (Windows XP) 出现错误

r - read.table()不容许丢失数据吗?