[英]Assign Value to Column Based on Range of Two Columns in R
我正在嘗試根據兩列時間為新列(工作時間)分配 TRUE 或 FALSE。 當時間在某個范圍內時,我想聲明為 TRUE,當時間超出該范圍時,我想聲明為 FALSE。 我正在使用以下代碼 - 但在正確分配 TRUE/FALSE 值時遇到問題:
我的 df 被稱為 ALLOBS,列 From 包含開始的時間,列 To 包含完成的時間。
Date From To Location Working Hours
1 1/28/2010 00:00 07:45 No Location NA
2 3/2/2010 07:45 16:30 Kahana NA
3 3/3/2010 08:00 16:15 Waikiki NA
4 3/4/2010 09:00 16:45 Kahana NA
5 3/5/2010 16:31 00:00 No Location NA
6 3/6/2010 12:00 13:15 Waikiki NA
7 3/7/2010 13:14 16:31 Kahana NA
8 3/8/2010 07:00 12:00 Honolulu NA
當時間在 07:30 (From) 和 16:30 (To) 之間時,我想寫 TRUE,當時間在 16:31 (To) 和 07:29 (From) 之間時寫 FALSE。 謝謝!
對您的數據是什么樣子以及您希望下面的兩個選項中的哪一個做出一些假設。 使用dplyr
和lubridate
問題是如何處理第 5 行,其中From
肯定在 07:30 之后,而To
在技術上在 16:30 之前(盡管它可能意味着第二天的 00:00 或同一天的 23:59?
ALLOBS
#> Date From To Location
#> 1 1/28/2010 00:00 07:45 No Location
#> 2 3/2/2010 07:45 16:30 Kahana
#> 3 3/3/2010 08:00 16:15 Waikiki
#> 4 3/4/2010 09:00 16:45 Kahana
#> 5 3/5/2010 16:31 00:00 No Location
#> 6 3/6/2010 12:00 13:15 Waikiki
#> 7 3/7/2010 13:14 16:31 Kahana
#> 8 3/8/2010 07:00 12:00 Honolulu
選項 #1 是我認為您想要通過檢查From
< 16:31 使第 5 行FALSE
library(dplyr)
library(lubridate)
ALLOBS %>%
mutate(Working_hours =
hms(paste0(From, ":00")) >= hms("07:30:00") &
hms(paste0(To, ":00")) < hms("16:31:00") &
hms(paste0(From, ":00")) < hms("16:30:00")
)
#> Date From To Location Working_hours
#> 1 1/28/2010 00:00 07:45 No Location FALSE
#> 2 3/2/2010 07:45 16:30 Kahana TRUE
#> 3 3/3/2010 08:00 16:15 Waikiki TRUE
#> 4 3/4/2010 09:00 16:45 Kahana FALSE
#> 5 3/5/2010 16:31 00:00 No Location FALSE
#> 6 3/6/2010 12:00 13:15 Waikiki TRUE
#> 7 3/7/2010 13:14 16:31 Kahana FALSE
#> 8 3/8/2010 07:00 12:00 Honolulu FALSE
選項 #2 省略了檢查,因此得出TRUE
ALLOBS %>%
mutate(Working_hours = hms(paste0(From, ":00")) > hms("07:30:00") &
hms(paste0(To, ":00")) < hms("16:31:00"))
#> Date From To Location Working_hours
#> 1 1/28/2010 00:00 07:45 No Location FALSE
#> 2 3/2/2010 07:45 16:30 Kahana TRUE
#> 3 3/3/2010 08:00 16:15 Waikiki TRUE
#> 4 3/4/2010 09:00 16:45 Kahana FALSE
#> 5 3/5/2010 16:31 00:00 No Location TRUE
#> 6 3/6/2010 12:00 13:15 Waikiki TRUE
#> 7 3/7/2010 13:14 16:31 Kahana FALSE
#> 8 3/8/2010 07:00 12:00 Honolulu FALSE
你的數據(我認為)
ALLOBS <- data.frame(
Date = c("1/28/2010", "3/2/2010", "3/3/2010",
"3/4/2010", "3/5/2010", "3/6/2010",
"3/7/2010", "3/8/2010"),
From = c("00:00", "07:45", "08:00", "09:00", "16:31",
"12:00", "13:14", "07:00"),
To = c("07:45", "16:30", "16:15", "16:45", "00:00",
"13:15", "16:31", "12:00"),
Location = c("No Location","Kahana", "Waikiki", "Kahana",
"No Location", "Waikiki", "Kahana", "Honolulu")
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.