我是R的新手,在根据某些标准对我的数据进行子化时遇到了一些问题。我有五列(位置,地点,物种,日期,时间)。
我想要做的是根据上一次记录的时间是否比上一次记录的相同日期、相同物种、相同地点和相同位置的时间长于一个小时来子集我的数据。如果前面的任何一列与前一列不同,我希望它忽略它并继续。
例如,这个数据帧应该说明前两条记录是独立的,因为时间列之前的所有列都是相同的,并且它们的间隔=或>60分钟,而最后一条记录是59分钟,所以不是独立的。
Location Site Species Date Time
Twelve 2 frog 14-10 13:45
Twelve 2 frog 14-10 14:45
Twelve 2 frog 14-10 15:44 在此示例中,前两行是独立的,但第三行是不同的物种,之后的行与第三行相同,但位置不同。第五行,所有数据都与前一行相同,除了它再次相隔59分钟。
这样的结果应该返回前两行(都是彼此独立的),第三行是独立于前一行和后一行(因为物种与之前的行不同,位置也不同于后一行),然后只返回第四行,因为它独立于之前的行,最后一行不应该显示在数据子集上,因为它不独立于之前的行(间隔<60分钟)。
Location Site Species Date Time
Twelve 2 frog 14-10 13:45
Twelve 2 frog 14-10 14:45
Twelve 2 badger 14-10 15:44
Thirteen 2 badger 14-10 16:44
Thirteen 2 badger 14-10 17:42发布于 2020-07-28 01:47:28
*编辑的tp包含OP注释*
仅对独立行执行filter。不显示临时列的select
df %>%
group_by(Location, Site, Species, Date) %>%
mutate(difftime = as.numeric(hms::as_hms(Time) - hms::as_hms(lag(Time, 1)))/3600) %>%
mutate(independent = case_when(
is.na(difftime) ~ TRUE,
difftime >= 1 ~ TRUE,
difftime < 1 ~ FALSE,
TRUE ~ FALSE)
) %>%
filter(independent) %>%
select(-difftime, -independent)
# A tibble: 4 x 5
# Groups: Location, Site, Species, Date [3]
Location Site Species Date Time
<chr> <dbl> <chr> <chr> <time>
1 Twelve 2 frog 14-10 13:45
2 Twelve 2 frog 14-10 14:45
3 Twelve 2 badger 14-10 15:44
4 Thirteen 2 badger 14-10 16:44 library(dplyr)
df %>%
group_by(Location, Site, Species, Date) %>%
mutate(difftime = as.numeric(Time - lag(Time, 1))/3600) %>%
mutate(independent = case_when(
is.na(difftime) ~ TRUE,
difftime >= 1 ~ TRUE,
difftime < 1 ~ FALSE,
TRUE ~ FALSE)
)
#> # A tibble: 6 x 7
#> # Groups: Location, Site, Species, Date [3]
#> Location Site Species Date Time difftime independent
#> <chr> <dbl> <chr> <chr> <time> <dbl> <lgl>
#> 1 Twelve 2 frog 14-10 13:45 NA TRUE
#> 2 Twelve 2 frog 14-10 14:45 1 TRUE
#> 3 Twelve 2 frog 14-10 15:44 0.983 FALSE
#> 4 Twelve 2 badger 14-10 15:44 NA TRUE
#> 5 Thirteen 2 badger 14-10 16:44 NA TRUE
#> 6 Thirteen 2 badger 14-10 17:42 0.967 FALSE添加hms::as_hms可使警告消息消失
df %>%
group_by(Location, Site, Species, Date) %>%
mutate(difftime = as.numeric(hms::as_hms(Time) - hms::as_hms(lag(Time, 1)))/3600) %>%
mutate(independent = case_when(
is.na(difftime) ~ TRUE,
difftime >= 1 ~ TRUE,
difftime < 1 ~ FALSE,
TRUE ~ FALSE)
)
#> # A tibble: 6 x 7
#> # Groups: Location, Site, Species, Date [3]
#> Location Site Species Date Time difftime independent
#> <chr> <dbl> <chr> <chr> <time> <dbl> <lgl>
#> 1 Twelve 2 frog 14-10 13:45 NA TRUE
#> 2 Twelve 2 frog 14-10 14:45 1 TRUE
#> 3 Twelve 2 frog 14-10 15:44 0.983 FALSE
#> 4 Twelve 2 badger 14-10 15:44 NA TRUE
#> 5 Thirteen 2 badger 14-10 16:44 NA TRUE
#> 6 Thirteen 2 badger 14-10 17:42 0.967 FALSE您的数据
df <- readr::read_table2("Location Site Species Date Time
Twelve 2 frog 14-10 13:45
Twelve 2 frog 14-10 14:45
Twelve 2 frog 14-10 15:44
Twelve 2 badger 14-10 15:44
Thirteen 2 badger 14-10 16:44
Thirteen 2 badger 14-10 17:42")https://stackoverflow.com/questions/63119415
复制相似问题