簡體   English   中英

根據R中的一小部分重復值而不是整個數據幀刪除行

[英]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 首先按StepsTime排列數據幀,然后按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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM