[英]Removing rows based on a stretch of repeated values in R, but not the whole data frame
我有一个约20,000行的数据框,该数据框分为两列:时间和步骤。 重复的步骤重复/重复的读数相隔几秒钟到几分钟,所以unique()不能捕获它们。 !duplicates删除整个数据帧的重复项,因此即使几天后的合法记录有X步,行也只有X步。 我想删除这些重复片段,保留一个唯一的记录,保留哪一个都没关系。 而且,重复次数不一致。 可能是8,可能是2。
>View(df)
Time Steps
13737 2017-08-07 09:53:14 16
13738 2017-08-07 09:53:14 16
13739 2017-08-07 09:57:51 61
13740 2017-08-07 09:59:05 61
13741 2017-08-07 09:59:07 61
13742 2017-08-07 09:59:11 61
13743 2017-08-07 09:59:14 61
13744 2017-08-07 09:59:14 61
13745 2017-08-07 10:03:51 29
13746 2017-08-07 10:05:05 29
13747 2017-08-07 10:05:07 29
13748 2017-08-07 10:05:11 29
13749 2017-08-07 10:05:14 29
13750 2017-08-07 10:05:14 29
13751 2017-08-07 10:09:51 54
13752 2017-08-07 10:11:05 54
13753 2017-08-07 10:11:07 54
所需的输出:
13737 2017-08-07 09:53:14 16
13739 2017-08-07 09:57:51 61
13745 2017-08-07 10:03:51 29
13751 2017-08-07 10:09:51 54
我考虑过的另一种解决方案是将数据集缩减为每10分钟左右获取一次行,如果这是理想的话,我也可以在那里使用一些指导
我们可以使用dplyr
。 首先按Steps
和Time
排列数据帧,然后按Steps
进行分组。 最后,对每组第一行的数据帧进行切片。
library(dplyr)
library(lubridate)
df2 <- df %>%
mutate(Time = ymd_hms(Time)) %>%
arrange(Steps, Time) %>%
group_by(Steps) %>%
slice(1)
或这个
df2 <- df %>%
mutate(Time = ymd_hms(Time)) %>%
arrange(Steps, Time) %>%
group_by(Steps) %>%
filter(row_number() == 1)
或者我们可以使用data.table
。
library(data.table)
dt <- as.data.table(df)
dt2 <- dt[, .SD[1], by = Steps][, c("Time", "Steps")]
df <- read.table(text = " Time Steps
13737 '2017-08-07 09:53:14' 16
13738 '2017-08-07 09:53:14' 16
13739 '2017-08-07 09:57:51' 61
13740 '2017-08-07 09:59:05' 61
13741 '2017-08-07 09:59:07' 61
13742 '2017-08-07 09:59:11' 61
13743 '2017-08-07 09:59:14' 61
13744 '2017-08-07 09:59:14' 61
13745 '2017-08-07 10:03:51' 29
13746 '2017-08-07 10:05:05' 29
13747 '2017-08-07 10:05:07' 29
13748 '2017-08-07 10:05:11' 29
13749 '2017-08-07 10:05:14' 29
13750 '2017-08-07 10:05:14' 29
13751 '2017-08-07 10:09:51' 54
13752 '2017-08-07 10:11:05' 54
13753 '2017-08-07 10:11:07' 54",
header = TRUE, stringsAsFactors = FALSE)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.