我必须在这个问题上遗漏一些东西,因为它看起来很简单并且已经有太多时间了。
假设我们在数据帧中有一个序数因子列。我们希望通过将原始列删除或扩展一个级别或类别来创建新列。什么是最快的方式?
数据
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时,它返回y。