获得 R 中序数因子的先前水平

Obtain previous level of ordinal factor in R

我一定是漏掉了这个问题,因为它看起来很简单,而且已经花了太多时间。

假设我们在数据框中有一个序数列。我们希望通过将原始列删除或放大一个级别或类别来创建一个新列。最快的方法是什么?

数据

col_string <- as.character(c(1:5))
col_factor <- factor(col_string, levels = as.character(c(1:8)), ordered = TRUE)

所需的解决方案:

col_solution <- c(8,1,2,3,4)
df <- cbind(col_string, col_factor, col_solution)
df
     col_string col_factor col_solution
[1,] "1"        "1"        "8"         
[2,] "2"        "2"        "1"         
[3,] "3"        "3"        "2"         
[4,] "4"        "4"        "3"         
[5,] "5"        "5"        "4"

如何在代码中告诉 R:

col_solution <- shift down one level of the element in col_factor

编辑澄清:

col_factor 列有 8 个类别,尽管只代表了其中的 5 个类别。类别按 1-2-3-4-5-6-7-8 排序。如果一个元素在类别 1 上,而我们想要降低一个类别,我们将转到类别 8。

function(myFactor,shift = -1){
    myFactor[] <- (as.numeric(myFactor)-1+shift)(length(levels(myFactor)))+1
    return(myFactor)
}

了解索引的作用有点麻烦。

((x-1) %% y) +1给出x/y的余数,但是当余数为0时,它returnsy。