【发布时间】:2015-02-21 00:01:09
【问题描述】:
我想在数据表中创建一个新变量,其值取决于数据表中其他变量的关系。假设我有一个包含三个变量的数据表:
library(data.table)
DT <- data.table(replicate(3,sample(0:2,5,replace=TRUE)))
DT
V1 V2 V3
1: 0 2 1
2: 1 2 1
3: 2 0 1
4: 1 1 0
5: 1 0 0
我想创建一个基于以下函数的新变量:
myfun <- function(a,b,c) {
newvar = "x"
if (a > b + c) {
newvar = "a"
}
if (b > a + c) {
newvar = "b"
}
if (c > a + b) {
newvar = "c"
}
return(newvar)
}
我尝试应用与加法等相同的逻辑,但在这里失败了。
DT[, new_var := myfun(V1, V2, V3)]
这应该与向量的加法和比较的不同性质有关。解决这个问题的正确方法是什么?
【问题讨论】:
-
我猜它不起作用,因为
if运算符未矢量化。相反,您可以使用ifelse。 -
@janosdivenyi 另一个使用
combnindx <- DT>DT[,3:1, with=FALSE][, combn(.SD, 2, FUN=function(x) x[[1]]+x[[2]])]; DT[, newcol:=c('x', letters[1:3])[as.vector(indx%*%seq_len(ncol(indx)))+1]]的选项
标签: r comparison data.table