我正在尝试解决以下问题。我有一个变量,我想相应地应用特定代码:
值 0 到 5 = "1"
值 5 到 10 = "2"
值 10 到 20 = "3"
值 >20 = "4"
值 0 到 -5) = "-1"
值 -5 到 -10 = "-2"
值 -10 到 -20 = "-3"
值 <-20 = "-4"
这是感兴趣的变量(“var”)的模拟示例。由于我将它放在一个数据框中,并且一条错误消息说明了“具有经度的条件”,因此我也将它放在了一个数据框中:
var=c(rep(1,3), rep(5,3), rep(10, 3), rep(20,3), rep(-1,3), rep(-5,3), rep(-10, 3), rep(-20,3))
var2=c(rep("long", 12), rep("short", 12))
df=data.frame(var, var2)
我试图用我通过 ifelse 函数处理的实际数据来解决这个问题,但我只知道如何将它应用于三个数据类。
var3=ifelse(df$var >= 20, 3, ifelse(df$var<10,1,2))
我还尝试了另一种方法,else if 函数:
df$var3=if (df$var < -20)
{print("-4")}
else if (df$var < -10)
{print("-3")}
else if (df$var < -5)
{print("-2")}
else if (df$var < 0)
{print("-1")}
else if (df$var > 0)
{print("1")}
else if (df$var > 5)
{print("2")}
else if (df$var > 10)
{print("3")}
else (df$var > 20)
{print("4")}
但后者只会引发各种错误。我怎样才能最好地做我想做的事?请帮忙。谢谢!
正如@Sotos' 在他的评论中提到的,我们可以使用cut
:
eps <- 1e-10;
df$var3 <- cut(
df$var,
breaks = c(-Inf, -20 + eps, -10 + eps, -5 + eps, 0, 5 - eps, 10 - eps, 20 - eps, Inf),
labels = c("-4", "-3", "-2", "-1", "1", "2", "3", "4"))
# var var2 var3
#1 1 long 1
#2 1 long 1
#3 1 long 1
#4 5 long 2
#5 5 long 2
#6 5 long 2
#7 10 long 3
#8 10 long 3
#9 10 long 3
#10 20 long 4
#11 20 long 4
#12 20 long 4
#13 -1 short -1
#14 -1 short -1
#15 -1 short -1
#16 -5 short -2
#17 -5 short -2
#18 -5 short -2
#19 -10 short -3
#20 -10 short -3
#21 -10 short -3
#22 -20 short -4
#23 -20 short -4
#24 -20 short -4
请注意,这var3
是一个character
向量(根据您的问题陈述);numeric
如有必要,更改为。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句