2017-10-06 74 views
1

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

的样本数据:

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

回答

3

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") 
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)] 
-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 

这不是优雅,但我希望能帮到你。

问候。

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之后。