将星期几编号转换为R中的工作日名称

时间:2017-10-06 20:02:46

标签: r date

我在数据框中有一个包含日期编号的列(0到6,0 =星期日,1 =星期一等),我需要将其转换为日期名称。我怎么能这样做?

示例数据:

df <- data.frame(day_number=0:6)

5 个答案:

答案 0 :(得分:4)

使用dplyr的简单方法。

library(dplyr)

df <- data.frame(day_number=0:6)

df$day_number <- recode(df$day_number, 
       "0"="Sunday",
       "1"="Monday",
       "2"="Tuesday",
       "3"="Wednesday",
       "4"="Thursday",
       "5"="Friday",
       "6"="Saturday")

答案 1 :(得分:1)

将列视为具有日期名称的因子作为标签:

x <- data.frame(wday=rep(0:6, 2))
x$wday_name <- factor(x$wday, levels=0:6,
                      labels=c("Sunday", "Monday", "Tuesday", "Wednesday",
                               "Thursday", "Friday", "Saturday"))
x
#    wday wday_name
# 1     0    Sunday
# 2     1    Monday
# 3     2   Tuesday
# 4     3 Wednesday
# 5     4  Thursday
# 6     5    Friday
# 7     6  Saturday
# 8     0    Sunday
# 9     1    Monday
# 10    2   Tuesday
# 11    3 Wednesday
# 12    4  Thursday
# 13    5    Friday
# 14    6  Saturday

如果您需要字符列,请在之后使用as.character

答案 2 :(得分:0)

假设您有此数据框:

dat = data.frame(daynumber = c(1,5,6,0))

创建一个显示当天相应编号的数据框

df <- data.frame(Number = 0:6,
                 Day = weekdays(x=as.Date(seq(7), origin="2017-10-01")))

使用匹配来匹配值

dat$daynumber = df$Day[match(dat$daynumber,df$Number)]

答案 3 :(得分:0)

有点晚了,但是我正在寻找找到相同的解决方案,并发现在lubridate中会有某种方式来做到这一点。 lubridate将第1天到第7天编码,但是仍然有一个简单的解决方案:

library(lubridate)

df <- data.frame(day_number=0:6) %>% # Your data
  mutate(t_day_number = day_number +1) %>% # Add 1 to your existing day number
  mutate(day_of_week  = wday(t_day_number, label = TRUE)) # Use wday and switch on labels

  day_number t_day_number day_of_week
1          0            1         Sun
2          1            2         Mon
3          2            3         Tue
4          3            4         Wed
5          4            5         Thu
6          5            6         Fri
7          6            7         Sat

此后,您可以使用select删除不需要的列。

答案 4 :(得分:-1)

如果不想安装任何软件包,有一个很好的解决方案:

首先,让我们使用您的日期系统创建一个带有随机变量的data.frame,例如:

dnum<-sample(0:6,10,replace=T)
var<-sample(LETTERS,10,replace=T)
df<-data.frame(dnum,var)
> df
   dnum var
1     3   K
2     4   D
3     4   L
4     3   J
5     6   A
6     2   W
7     3   A
8     3   W
9     2   D
10    4   K

您可以使用星期几名称创建数据库:

dnom<-c('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday')
do<-0:6
dfo <- data.frame(dnom,do)
> dfo
       dnom do
1    Sunday  0
2    Monday  1
3   Tuesday  2
4 Wednesday  3
5  Thursday  4
6    Friday  5
7  Saturday  6

现在,使用循环查找比较data.frame中的日期数字与数据库,并替换星期几的名称。

sub<-c()
for(i in 1 :nrow(df)){
  d<-dfo[dfo$do==df$dnum[i],]
  sub[i]<-as.character(d$dnom[1])
}
df$dnum<-sub

        dnum var
1  Wednesday   K
2   Thursday   D
3   Thursday   L
4  Wednesday   J
5   Saturday   A
6    Tuesday   W
7  Wednesday   A
8  Wednesday   W
9    Tuesday   D
10  Thursday   K

它并不优雅,但我希望能帮到你。

问候。