如何解决按组选择每次运行的第一行
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
rleid
和 duplicated
-
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 举报,一经查实,本站将立刻删除。