英文:
Ordering days of the week (consecutive days)
问题
我有一个包含一些星期几的向量,我需要它们按顺序排列,我有一种感觉可能有一个可以处理星期的包。
mydays
"星期五" "星期一" "星期六" "星期天"
我希望它们变成这样。在这里也值得注意的是,这会有点不同,我不能像通常那样按星期几排序,因为星期一会排在第一位(我不想要这样),我的日期总是连续的,这可能会使它更容易排序。
mydays
"星期五" "星期六" "星期天" "星期一"
我尝试了但似乎不起作用,因为没有东西可以排序,R 不知道星期五和星期六之间的区别,例如。
mydays[order(mydays)]
英文:
I have a vector of some days of the week which I need to be in order, I have a feeling there might be a package that deal with days but could well be wrong.
mydays
"Friday" "Monday" "Saturday" "Sunday"
I want these to become. Also worth noting here that this will be a bit different and i cant just normally order by days of the week as Monday will be first (I don't want this), my days will always be consecutive days which might make it a bit easer to order
mydays
"Friday" "Saturday" "Sunday" "Monday"
I've tried buy looks like it doesnt work as theres nothing to order on as R doesn't know any difference between Friday and Saturday for example.
mydays[order(mydays)]
答案1
得分: 2
更新: 我们可以创建一个星期几的向量,并将其用作因子水平:
# 你的字符字符串向量
mydays <- c("Friday","Monday","Saturday","Sunday" )
# 转换为因子
mydays <- factor(mydays, levels = weekdays(ISOdate(1, 1, 1:7)))
# 对因子排序
sort(mydays)
# [1] Monday Friday Saturday Sunday
# Levels: Monday Tuesday Wednesday Thursday Friday Saturday Sunday
第一个答案:
首先转换为因子,然后排序:
# 你的字符字符串向量
mydays <- c("Friday","Monday","Saturday","Sunday" )
# 转换为因子
mydays <- factor(mydays, levels = c("Friday", "Saturday", "Sunday", "Monday"))
# 对因子排序
sort(mydays)
输出:
[1] Friday Saturday Sunday Monday
Levels: Friday Saturday Sunday Monday
英文:
Update: We could create a vector of weekdays and use it as factor levels:
# your character string vector
mydays <- c("Friday","Monday","Saturday","Sunday" )
# transfrom to factor
mydays <- factor(mydays, levels = weekdays(ISOdate(1, 1, 1:7)))
# order the factor
sort(mydays)
# [1] Monday Friday Saturday Sunday
# Levels: Monday Tuesday Wednesday Thursday Friday Saturday Sunday
First answer:
First convert to factor then order:
# your character string vector
mydays <- c("Friday","Monday","Saturday","Sunday" )
# transfrom to factor
mydays <- factor(mydays, levels = c("Friday", "Saturday", "Sunday", "Monday"))
# order the factor
sort(mydays)
output:
[1] Friday Saturday Sunday Monday
Levels: Friday Saturday Sunday Monday
答案2
得分: 2
我们可以根据输入向量中第一天的匹配来旋转因子水平,在您的示例中,它是星期五:
#旋转向量的函数
#https://stackoverflow.com/a/30542172/680068
shifter <- function(x, n = 1) {
if (n == 0) x else c(tail(x, -n), head(x, n))
}
# 输入
mydays <- c("星期五","星期一","星期六","星期日" )
# 获取工作日
wd <- weekdays(ISOdate(1, 1, 1:7))
# 基于起始日进行移位
wdShift <- shifter(wd, which(wd == mydays[1]) - 1)
# 转换为因子
mydays <- factor(mydays, levels = wdShift)
# 对因子排序
sort(mydays)
# [1] 星期五 星期六 星期日 星期一
# Levels: 星期五 星期六 星期日 星期一 星期二 星期三 星期四
英文:
We can rotate the factor levels based on match of the first day of the week in the input vector, in your example, it is Friday:
#function to rotate vector
#https://stackoverflow.com/a/30542172/680068
shifter <- function(x, n = 1) {
if (n == 0) x else c(tail(x, -n), head(x, n))
}
# input
mydays <- c("Friday","Monday","Saturday","Sunday" )
# get weekdays
wd <- weekdays(ISOdate(1, 1, 1:7))
# shift based on starting day
wdShift <- shifter(wd, which(wd == mydays[1]) - 1)
# transfrom to factor
mydays <- factor(mydays, levels = wdShift)
# order the factor
sort(mydays)
# [1] Friday Saturday Sunday Monday
# Levels: Friday Saturday Sunday Monday Tuesday Wednesday Thursday
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论