[英]Group data into new column value based of condition
我有如下數據:
Caller Date Duration Status
304 2/1/2016 756 ANSWERED
304 2/1/2016 61 ANSWERED
304 2/4/2016 60 ANSWERED
304 2/10/2016 61 ANSWERED
304 2/17/2016 60 ANSWERED
304 2/19/2016 30 ANSWERED
304 2/24/2016 27 ANSWERED
304 2/28/2016 55 ANSWERED
304 2/28/2016 63 ANSWERED
我想基於周將數據分組到R中,即,如果日期位於2/1/2017到2/7/2017之間,則添加一個名為“ week”的新列,並將這些元組的值設置為Week 1。 在一個月中的所有其他星期類似。
輸出看起來像這樣
Caller Date Duration Status Week
304 2/1/2016 756 ANSWERED Week 1
304 2/1/2016 61 ANSWERED Week 1
304 2/4/2016 60 ANSWERED Week 1
304 2/10/2016 61 ANSWERED Week 2
304 2/17/2016 60 ANSWERED Week 2
304 2/19/2016 30 ANSWERED Week 3
304 2/24/2016 27 ANSWERED Week 4
304 2/28/2016 55 ANSWERED Week 4
304 2/28/2016 63 ANSWERED Week 4
請建議我使用R的方法。謝謝
一種方法是使用lubridate
和dplyr
假設您的數據位於名為dat
的數據幀中:
library(lubridate)
library(dplyr)
dat$Date <- mdy(dat$Date)
t0 <- dat[1, 2]
dat %>% mutate(Week = paste('Week', as.integer(Date - t0) / 7) + 1))
結果:
Caller Date Duration Status Week
1 304 2016-02-01 756 ANSWERED Week 1
2 304 2016-02-01 61 ANSWERED Week 1
3 304 2016-02-04 60 ANSWERED Week 1
4 304 2016-02-10 61 ANSWERED Week 2
5 304 2016-02-17 60 ANSWERED Week 3
6 304 2016-02-19 30 ANSWERED Week 3
7 304 2016-02-24 27 ANSWERED Week 4
8 304 2016-02-28 55 ANSWERED Week 4
9 304 2016-02-28 63 ANSWERED Week 4
您可以直接使用
format(as.Date("2016-07-01"), format = "Week %U")
有關格式的更多詳細信息,請參見strptime
幫助。 請注意,例如,它只給出一年中的某個星期,因此2017年1月1日將早於2016年。您可以編寫類似於@ManishGoel的答案的包裝,將您的起點設置為第1周。
一個更通用的解決方案是使用cut
:
mycuts <- seq(as.Date("2016-01-01"), as.Date("2017-12-30"), 7 )
cut(as.Date("2016-07-01"), mycuts, labels = 1:(length(mycuts)-1))
這樣可以更輕松地滿足您的需求,並且可以更廣泛地應用於其他類別的問題。 如果您確實需要在那里的“周”,也可以直接執行以下操作:
cut(as.Date("2016-07-01"), mycuts, labels = paste("Week", 1:(length(mycuts)-1)))
您可以使用strsplit
提取日期,然后根據日期計算星期。
Week <- sapply(df$Date, FUN = function(x){
day <- as.numeric(strsplit(as.character(x),"/")[[1]]2]);
return(as.integer(day/7)+1)
})
df$Week <- Week
但是,您需要提供有關日期分配方式的更多信息,因為周數的計算取決於此。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.