我遇到了以下帖子:Vectorized IF statement in R?,它涉及R中一个if-else构造的泛化。但是,我不想在R中构建嵌套的$ ifelse $函数,还有另一种方法吗?为此吗?
作为一个例子,我有这个:
library(data.table)
precalc_nrcolumns <- function(TERM_DATE, CHANGE_DATE){
if(CHANGE_DATE < TERM_DATE){
if(CHANGE_DATE == 0) {
if(TERM_DATE > 100) {
nrcolumns <- 100
}else{
nrcolumns <- TERM_DATE
}
}else{
nrcolumns <- CHANGE_DATE
}
}else{
nrcolumns <- 100
}
return(nrcolumns)
}
test.data <- data.table(TERM_DATE = sample(1:500, 100, replace=TRUE),
CHANGE_DATE = sample(1:500, 100, replace=TRUE))
test.data[, value := mapply(precalc_nrcolumns, TERM_DATE, CHANGE_DATE)]
我完全知道使用mapply确实有效,但是我想知道还有什么其他方法可以解决这个问题。
答案 0 :(得分:2)
一种可能的方法:
test.data[, val := pmin(CHANGE_DATE, TERM_DATE)][
CHANGE_DATE==0L, val := pmin(100L, TERM_DATE)][
CHANGE_DATE >= TERM_DATE, val := 100L]
数据:
set.seed(0L)
library(data.table)
nr <- 300
test.data <- data.table(TERM_DATE = sample(0:150, nr, replace=TRUE),
CHANGE_DATE = sample(0:150, nr, replace=TRUE))