获得 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。
我一定是漏掉了这个问题,因为它看起来很简单,而且已经花了太多时间。
假设我们在数据框中有一个序数列。我们希望通过将原始列删除或放大一个级别或类别来创建一个新列。最快的方法是什么?
数据
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。