我正在尝试解决以下问题。我有一个变量,我想相应地应用特定的代码:
值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))
我还尝试了另一种方法,其他方法是函数:
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")}
但后者只会引发各种错误。我怎样才能最好地做我想做的事情?请帮忙。谢谢!
答案 0 :(得分:0)
正如@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
。