我正在构建一个数据集,其中有一个从 0 到 1 的连续变量,我想将其转换为具有 N 个“级别”的序数变量。例如,我有很多0到0.2之间的连续数字,需要全部转换为0.1,然后将0.2到0.4的连续数字转换为0.2等等。
这一点的部分重要性在于更改级别数量的动态能力,因为我的演示旨在展示具有可以动态修改的更多或更少级别的效果。
为了实现这一目标,我根据我的计划在 for 循环中编写了以下动态代码。我收到错误,第二个条件无法评估,其余条件返回默认值。
下面是动态代码:
binN3 <- pretty (x$x, n = 40)
x$y <- seq(0,1, length.out = 100)
x <- as.data.frame(x)
for(i in 1:length(binN3)) {
print(paste(i))
print(paste(binN3[i]))
x <- x %>%
mutate(ordinal = case_when(
y <= binN3[1] ~ 0,
y <= binN3[i+1] ~ print(binN3[i]),
.default = 999
))
}
以下是硬代码:
x <- x %>%
mutate(linresp = case_when(
x <= 0.02 ~ 0,
x <= 0.04 ~ 0.02,
x <= 0.06 ~ 0.04,
.default ~ 999
))
动态代码的结果如下所示:
0, 999, 999, 999....
我非常有信心我的错误就在这行代码中,尽管我不确定如何更改语法。
y <= binN3[i+1] ~ print(binN3[i])
我想要复制的硬代码的结果: 0、0、0、0、0.02、0.02、0.04、0.04。等等...
任何修复此错误的帮助将不胜感激!
您的代码的问题在于,mutate 将在循环的每次迭代中评估数据帧的每一行,因此每一行最终都会与 binN3 的最后一个值进行比较。
您的代码中没有数据框的声明,因此如果这对您不起作用,请告诉我,但我找到了一个可以满足您需求的函数:
x$ordinal <- cut(x$y, breaks = length(binN3), labels = binN3)