按组选择每次运行的第一行

如何解决按组选择每次运行的第一行

我有一个带有分组变量 (ID) 和一些值(类型)的数据:

ID <- c("1","1","2","3","3")
type <- c("1","1")

dat <- data.frame(ID,type)

在每个ID中,我想删除重复的数字,不是唯一的,而是与前一个相同的。我已经注释了一些例子:

#     ID type
#  1   1    1
#  2   1    3 # first value in a run of 3s within ID 1: keep 
#  3   1    3 # 2nd value: remove  
#  4   1    2
#  5   2    3
#  6   2    3
#  7   2    1
#  8   2    1
#  9   3    1
# 10   3    2 # first value in a run of 2s within ID 3: keep
# 11   3    2 # 2nd value: remove
# 12   3    1

例如,ID 3 的值序列为 1,2,1。第三个值与第二个值相同,因此应将其删除,变为 1,1

因此,所需的输出是:

data.frame(ID = c("1","3"),type = c("1","1"))

  ID type
1  1    1
2  1    3
3  1    2
4  2    3
5  2    1
6  3    1
7  3    2
8  3    1

我试过了

 df[!duplicated(df),]

然而我得到的是

ID <- c("1","3")
type<- c("1","2")

我知道重复只会保留唯一的。我怎样才能得到我想要的值?

提前感谢您的帮助!

解决方法

使用 data.table rleidduplicated -

library(data.table)
setDT(dat)[!duplicated(rleid(ID,type))]

#   ID type
#1:  1    1
#2:  1    3
#3:  1    2
#4:  2    3
#5:  2    1
#6:  3    1
#7:  3    2
#8:  3    1

改进了答案,包括来自@Henrik 的建议。

,

Base R way 如果你只想消除连续重复的行(8行输出)

main = do
    x <- (read . head ) <$> getArgs
    print $ <particular sum function> [1..x]

reprex package (v2.0.0) 于 2021 年 5 月 22 日创建

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?