我希望在我的名為周末的資料框中添加一個新列,如果當天是否在周末,則包含 TRUE 或 FASLE。這可以基于日期或作業日列。我該怎么做?
資料片段
Substation Date cluster Time Value weekday
1 511016 2013-01-17 1 00:00 0.6215941 Thursday
2 511029 2013-01-17 1 00:00 0.5677445 Thursday
3 511030 2013-01-17 1 00:00 0.6065458 Thursday
4 511033 2013-01-08 2 00:00 0.3090885 Tuesday
5 511034 2013-01-17 1 00:00 0.5263230 Thursday
6 511035 2013-01-19 1 00:00 0.5267718 Saturday
uj5u.com熱心網友回復:
像這樣的東西?你data用你的資料框替換的地方
library(tidyverse)
data %>% mutate(weekend = ifelse(weekday %in% c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday"), F, T))
或者
library(tidyverse)
data %>% mutate(weekend = ifelse(weekday %in% c("Saturday", "Sunday"), T, F))
uj5u.com熱心網友回復:
這可以通過?strptime(其中包括%-codes format(..))通知:
'%u' Weekday as a decimal number (1-7, Monday is 1).
準備,以防列中沒有Date物件dat$Date:
dat$Date <- as.Date(dat$Date)
代碼:
dat$is_weekend <- format(dat$Date, "%u") %in% 6:7
dat
# Substation Date cluster Time Value weekday is_weekend
# 1 511016 2013-01-17 1 00:00 0.6215941 Thursday FALSE
# 2 511029 2013-01-17 1 00:00 0.5677445 Thursday FALSE
# 3 511030 2013-01-17 1 00:00 0.6065458 Thursday FALSE
# 4 511033 2013-01-08 2 00:00 0.3090885 Tuesday FALSE
# 5 511034 2013-01-17 1 00:00 0.5263230 Thursday FALSE
# 6 511035 2013-01-19 1 00:00 0.5267718 Saturday TRUE
資料
dat <- structure(list(Substation = c(511016L, 511029L, 511030L, 511033L, 511034L, 511035L), Date = structure(c(15722, 15722, 15722, 15713, 15722, 15724), class = "Date"), cluster = c(1L, 1L, 1L, 2L, 1L, 1L), Time = c("00:00", "00:00", "00:00", "00:00", "00:00", "00:00"), Value = c(0.6215941, 0.5677445, 0.6065458, 0.3090885, 0.526323, 0.5267718), weekday = c("Thursday", "Thursday", "Thursday", "Tuesday", "Thursday", "Saturday"), is_weekend = c(FALSE, FALSE, FALSE, FALSE, FALSE, TRUE)), row.names = c("1", "2", "3", "4", "5", "6"), class = "data.frame")
uj5u.com熱心網友回復:
另一種可能的解決方案,基于lubridate::wday:
library(tidyverse)
library(lubridate)
df %>%
mutate(weekend = wday(ymd(Date)) %in% c(1,7))
#> Substation Date cluster Time Value weekday weekend
#> 1 511016 2013-01-17 1 00:00 0.6215941 Thursday FALSE
#> 2 511029 2013-01-17 1 00:00 0.5677445 Thursday FALSE
#> 3 511030 2013-01-17 1 00:00 0.6065458 Thursday FALSE
#> 4 511033 2013-01-08 2 00:00 0.3090885 Tuesday FALSE
#> 5 511034 2013-01-17 1 00:00 0.5263230 Thursday FALSE
#> 6 511035 2013-01-19 1 00:00 0.5267718 Saturday TRUE
uj5u.com熱心網友回復:
isWeekend這是使用from 的另一種可能的解決方案timeDate:
library(timeDate)
df$is_weekend <- isWeekend(as.Date(df$Date), wday = 1:5)
輸出
Substation Date cluster Time Value weekday is_weekend
1 511016 2013-01-17 1 00:00 0.6215941 Thursday FALSE
2 511029 2013-01-17 1 00:00 0.5677445 Thursday FALSE
3 511030 2013-01-17 1 00:00 0.6065458 Thursday FALSE
4 511033 2013-01-08 2 00:00 0.3090885 Tuesday FALSE
5 511034 2013-01-17 1 00:00 0.5263230 Thursday FALSE
6 511035 2013-01-19 1 00:00 0.5267718 Saturday TRUE
資料
df <- structure(list(Substation = c(511016L, 511029L, 511030L, 511033L,
511034L, 511035L), Date = c("2013-01-17", "2013-01-17", "2013-01-17",
"2013-01-08", "2013-01-17", "2013-01-19"), cluster = c(1L, 1L,
1L, 2L, 1L, 1L), Time = c("00:00", "00:00", "00:00", "00:00",
"00:00", "00:00"), Value = c(0.6215941, 0.5677445, 0.6065458,
0.3090885, 0.526323, 0.5267718), weekday = c("Thursday", "Thursday",
"Thursday", "Tuesday", "Thursday", "Saturday"), is_weekend = c(FALSE,
FALSE, FALSE, FALSE, FALSE, TRUE)), row.names = c(NA, -6L), class = "data.frame")
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/462264.html
標籤:r
上一篇:R-資料框列中序列中數字的平均值
