R删除除第一次出现以外的所有内容
我有一个如下所示的数据帧:R删除除第一次出现以外的所有内容,r,sorting,dataframe,subset,R,Sorting,Dataframe,Subset,我有一个如下所示的数据帧: id date time 1 1 15-12-15 10:30 2 2 15-12-15 08:30 3 3 16-12-15 10:30 4 1 16-12-15 08:30 df <- data.frame(id=c(1,2,3,1), date=c("15-12-15", "15-12-15", "16-12-15", "16-12-15"), time=c("10
id date time
1 1 15-12-15 10:30
2 2 15-12-15 08:30
3 3 16-12-15 10:30
4 1 16-12-15 08:30
df <- data.frame(id=c(1,2,3,1),
date=c("15-12-15", "15-12-15", "16-12-15", "16-12-15"),
time=c("10:30", "08:30", "10:30", "08:30"))
可以这样创建:
id date time
1 1 15-12-15 10:30
2 2 15-12-15 08:30
3 3 16-12-15 10:30
4 1 16-12-15 08:30
df <- data.frame(id=c(1,2,3,1),
date=c("15-12-15", "15-12-15", "16-12-15", "16-12-15"),
time=c("10:30", "08:30", "10:30", "08:30"))
因此,这将保留id不重复的所有行,但保留条件不明确。它似乎只保留了按日期排序时遇到的第一个事件
有没有一种方法可以做到这一点而不必首先进行日期排序?我们需要fromLast=TRUE
如果我们需要考虑在例子
中已经排序的“日期”和“时间”library(lubridate)
df[!duplicated(df$id[with(df, order(id, ymd_hm(paste(date, time))))], fromLast = TRUE),]
# id date time
#2 2 15-12-15 08:30
#3 3 16-12-15 10:30
#4 1 16-12-15 08:30
我们需要fromLast=TRUE
如果我们需要考虑在例子
中已经排序的“日期”和“时间”library(lubridate)
df[!duplicated(df$id[with(df, order(id, ymd_hm(paste(date, time))))], fromLast = TRUE),]
# id date time
#2 2 15-12-15 08:30
#3 3 16-12-15 10:30
#4 1 16-12-15 08:30
你可能需要这样的东西:
library(dplyr)
df %>%
group_by(id) %>%
mutate(datetime = as.POSIXct(paste(date, time), format = "%d-%m-%y %H:%M")) %>%
arrange(datetime) %>%
slice(1) %>%
select(-datetime)
# id date time
# <dbl> <fctr> <fctr>
#1 1 15-12-15 10:30
#2 2 15-12-15 08:30
#3 3 16-12-15 10:30
我们创建一个POSIXct对象,将日期和时间列粘贴在一起,相应地排列它们,并从每组中选择最早出现的第一个观测值 您可能需要这样的东西:
library(dplyr)
df %>%
group_by(id) %>%
mutate(datetime = as.POSIXct(paste(date, time), format = "%d-%m-%y %H:%M")) %>%
arrange(datetime) %>%
slice(1) %>%
select(-datetime)
# id date time
# <dbl> <fctr> <fctr>
#1 1 15-12-15 10:30
#2 2 15-12-15 08:30
#3 3 16-12-15 10:30
我们创建一个POSIXct对象,将日期和时间列粘贴在一起,相应地排列它们,并从每组中选择最早出现的第一个观测值 data.table包含一个增强的unique函数,该函数接受一个by参数来指定用于唯一性检查的列:
library(data.table)
unique(setDT(df, key = c("date", "time")), by = "id")
setDT将df强制为data.table类。键参数对df进行排序并将其标记为已排序。data.table包含一个增强的unique函数,该函数接受by参数以指定用于唯一性检查的列:
library(data.table)
unique(setDT(df, key = c("date", "time")), by = "id")
setDT将df强制为data.table类。关键参数对df进行排序并将其标记为已排序。使用dplyr的一种替代方法可以是:
其中:
id date time
<dbl> <fctr> <fctr>
1 2 15-12-15 08:30
2 1 15-12-15 10:30
3 3 16-12-15 10:30
使用dplyr的一个备选方案可以是:
其中:
id date time
<dbl> <fctr> <fctr>
1 2 15-12-15 08:30
2 1 15-12-15 10:30
3 3 16-12-15 10:30