之前有人为我提出并回答了一个问题,请参阅此处:(subsetting data based on four columns using if else statements)
请他们解决了问题,但我有一个后续问题,如何将代码中的时间从 1 小时更改为 30 分钟?
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)
我对代码进行了多次更改,但未能找到满意的答案!
答案 0 :(得分:0)
建议使用 baseR 中的 difftime
函数,而不是直接减去时间单位,其中可以明确提供单位。在以下语法中,我使用 unit = "mins"
在几分钟内获得输出,然后相应地更改您的语法。
df %>%
group_by(Location, Site, Species, Date) %>%
mutate(difftime = as.numeric(difftime(hms::as_hms(Time), hms::as_hms(lag(Time, 1)) , unit = "mins"))) %>%
mutate(independent = case_when(
is.na(difftime) ~ TRUE,
difftime >= 30 ~ TRUE,
difftime < 30 ~ FALSE,
TRUE ~ 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")