【发布时间】:2026-02-19 10:50:02
【问题描述】:
我像这样创建一个data.table:
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 显然是矢量化的。但我想产生三种不同的输出,而不是两种。
【问题讨论】:
-
您也可以改为处理子集。例如,
dd[V1 > V2 & V2 > V3, Cat := {"decrease,decrease"}]以避免if语句/嵌套在一起。
标签: r data.table