我正在寻找一种更快捷的方法来替换带有数字的R数据帧中的星期几。从本质上讲,我想知道的问题是给出一个向量,并且相应的向量可以快速地将替换应用于数据帧。
这是我的数据框:
month day_of_week skies
1 APR Tuesday Clear
2 APR Wednesday Cloudy
3 APR Thursday Cloudy
4 APR Friday Cloudy
5 APR Saturday Cloudy
6 APR Sunday Clear
一周的日期在以下向量中:
daysweek <- unique(df$day_of_week)
daysweek
[1] Tuesday Wednesday Thursday Friday Saturday Sunday Monday
相应的矢量是:
days_num <- c(2,3,4,5,6,7,1)
我要做的很多方法是没有相应的向量并单独使用gsub。我想知道是否有一个快速的方法来做到这一点。我无法用for循环解决这个问题。
for (i in c(1:7)) {
df$result <- gsub(daysweek[i], days_num[i], df$day_of_week)
}
我想要的数据帧输出是:
month day_of_week skies
1 APR 2 Clear
2 APR 3 Cloudy
3 APR 4 Cloudy
4 APR 5 Cloudy
5 APR 6 Cloudy
6 APR 7 Clear
答案 0 :(得分:2)
使用index
列创建weekdays
match
和day_of_week
。
Date <- as.Date('2014-12-29') #Monday
Wdays <- weekdays(seq(Date, length.out=7, by= '1 day'))
df[,2] <- match(df[,2],Wdays)
df[,2]
#[1] 2 3 4 5 6 7
或者您可以将列转换为factor
,其级别从Monday
到Sunday
,并将其转换为numeric
as.numeric(factor(df$day_of_week, levels=c("Monday", "Tuesday",
"Wednesday", "Thursday", "Friday", "Saturday", "Sunday")))
#[1] 2 3 4 5 6 7
如果您的vector
数字索引与unique
列中的day_of_week
值相对应
Un <- c('Tuesday', 'Wednesday', 'Thursday', 'Friday',
'Saturday', 'Sunday', 'Monday')
days_num <- c(2,3,4,5,6,7,1)
set.seed(24)
day_of_week <- sample(Un, 20, replace=TRUE)
unname(setNames(days_num, Un)[day_of_week])
#[1] 4 3 6 5 6 1 3 7 7 3 6 4 6 6 4 1 3 2 5 2
由于您使用了gsub
,因此来自mgsub
的其他选项为qdap
library(qdap)
as.numeric(mgsub(Un, days_num, day_of_week))
#[1] 4 3 6 5 6 1 3 7 7 3 6 4 6 6 4 1 3 2 5 2
或
library(qdapTools)
day_of_week %l% data.frame(Un, days_num)
#[1] 4 3 6 5 6 1 3 7 7 3 6 4 6 6 4 1 3 2 5 2