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

问题描述 投票:0回答:1

我必须在这个问题上遗漏一些东西,因为它看起来很简单并且已经有太多时间了。

假设我们在数据帧中有一个序数因子列。我们希望通过将原始列删除或扩展一个级别或类别来创建新列。什么是最快的方式?

数据

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类。

r categorical-data
1个回答
0
投票
function(myFactor,shift = -1){
    myFactor[] <- (as.numeric(myFactor)-1+shift)(length(levels(myFactor)))+1
    return(myFactor)
}

让你了解索引正在做的事情有点痛苦。

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

© www.soinside.com 2019 - 2024. All rights reserved.