防止条件具有长度> 1:=操作者在data.table中的R

问题描述:

我创建data.table这样的:防止条件具有长度> 1:=操作者在data.table中的R

dd<-data.table(c(7,8,9),c(10,5,10),c(8,9,11)) 

然后我尝试使用:=通过它的功能,但我得到条件具有长度> 1错误。

dd[,Cat:= as.factor(if(V1 > V2 & V2 > V3) 
{"decrease,decrease"} else if(V1 > V2 & V2 < V3) 
{"decrease,increase"} else if(V1 < V2 & V2 < V3) 
{"increase,increase"} else if(V1 < V2 & V2 > V3) 
{"increase,decrease"})] 

我知道这是因为这是if如何工作。我可以做类似下面如果我只用了两列:

dd[, Cat:= as.factor(ifelse(V1>V2, "increase", "decrease"))] 

其中一期工程,因为ifelse显然量化。但我有三种不同的产出,我不想两种。

+1

你也可以在子集上工作。例如'dd [V1> V2&V2> V3,Cat:= {“decrease,decrease”}]'以避免if语句/嵌套在一起。 –

您可以嵌套ifelse

ifelse(V1 > V2 & V2 > V3, "decrease,decrease", 
    ifelse(V1 > V2 & V2 < V3, "decrease,increase", 
     ifelse(...))) 

但在这种情况下,我可能会做paste(ifelse(V1 < V2, "increase", "decrease"), ifelse(V2 < V3, "increase", "decrease"), sep = ",")所以我没有给每一个组合写出来的。

另请参阅Alternatives to nested ifelsenested ifelse statement in R