首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用if else语句根据四列设置数据子集

使用if else语句根据四列设置数据子集
EN

Stack Overflow用户
提问于 2020-07-28 00:24:25
回答 1查看 67关注 0票数 1

我是R的新手,在根据某些标准对我的数据进行子化时遇到了一些问题。我有五列(位置,地点,物种,日期,时间)。

我想要做的是根据上一次记录的时间是否比上一次记录的相同日期、相同物种、相同地点和相同位置的时间长于一个小时来子集我的数据。如果前面的任何一列与前一列不同,我希望它忽略它并继续。

例如,这个数据帧应该说明前两条记录是独立的,因为时间列之前的所有列都是相同的,并且它们的间隔=或>60分钟,而最后一条记录是59分钟,所以不是独立的。

代码语言:javascript
复制
  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分钟)。

代码语言:javascript
复制
  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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-28 01:47:28

*编辑的tp包含OP注释*

仅对独立行执行filter。不显示临时列的select

代码语言:javascript
复制
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 
代码语言:javascript
复制
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可使警告消息消失

代码语言:javascript
复制
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

您的数据

代码语言:javascript
复制
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")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63119415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档