假设我有四个样本:id=1、2、3和4,每个样本上有一个或多个测量值:

> a <- data.frame(id=c(1,1,2,2,3,4), value=c(1,2,3,-4,-5,6))
> a
  id value
1  1     1
2  1     2
3  2     3
4  2    -4
5  3    -5
6  4     6

我想删除重复项,每个ID只保留一个条目,即"value"列中绝对值最大的条目.也就是说,这就是我想要的:

> a[c(2,4,5,6), ]
  id value
2  1     2
4  2    -4
5  3    -5
6  4     6

我在R怎么做?

推荐答案

第一按顺序排序,将不太想要的项目放在最后id组内

 aa <- a[order(a$id, -abs(a$value) ), ] #sort by id and reverse of abs(value)

然后:在id组内移除第一次之后的项目

 aa[ !duplicated(aa$id), ]              # take the first row within each id
  id value
2  1     2
4  2    -4
5  3    -5
6  4     6

R相关问答推荐

使用map()内的公式()创建多个公式

将虚线添加到每个站点的传奇中平均

如何使用文本表达来子集数据

是否有R代码来判断一个组中的所有值是否与另一个组中的所有值相同?

在R中查找每个组不同时间段的总天数

在垂直轴中包含多个ggplot2图中的平均值

基于多列将值链接到NA

如何动态更新selectizeInput?

如何在Chart_Series()中更改轴值的 colored颜色 ?

多个过滤器内的一个盒子在仪表板Quarto

非线性混合效应模型(NLME)预测变量的置信区间

在R函数中使用加号

将标识符赋给事件序列,避免错误观察

如何在使用箭头R包(箭头::OPEN_DATASSET)和dplyr谓词时编写具有整齐计算的函数?

使用R将简单的JSON解析为嵌套框架

计算来自单独分组的分幅的值的百分位数

如何在内联代码中添加额外的空格(R Markdown)

ggplot斜体轴刻度标签中的单个字符-以前的帖子建议不工作

如果极点中存在部分匹配,则替换整个字符串

如何将字符类对象中的数据转换为R中的字符串