示例数据:
t.mean <- c(15.02,8)
t.base <- 10
t.opt <- 28
dat <- data.frame(cbind(t.mean,t.base,t.opt))
dat
t.mean t.base t.opt
1 15.02 10 28
2 8.00 10 28
我想在dat
中创建另一个名为fT
的列。条件是如果t.mean >= t.base
和 t.mean <= t.opt
,则fT
计算为(t.mean - t.base)/(t.opt - t.base)
。如果不是,则指定值0。
在这种情况下,第二行不符合条件(t.mean >= t.base
),因此fT
的值应为零。这是我的代码:
if(dat$t.mean >= dat$t.base & dat$t.mean <= dat$t.opt){
dat$fT <- (dat$t.mean - dat$t.base)/(dat$t.opt - dat$t.base)
} else {
dat$fT <- 0
}
dat
t.mean t.base t.opt fT
1 15.02 10 28 0.2788889
2 8.00 10 28 -0.1111111
我不确定为什么会这样?此外,它还会生成错误
In if (dat$t.mean >= dat$t.base & dat$t.mean <= dat$t.opt) { :
the condition has length > 1 and only the first element will be used
相反,如果我使用ifelse语句,它会给我正确答案。
ifelse(dat$t.mean >= dat$t.base & dat$t.mean <= dat$t.opt, dat$fT <- (dat$t.mean - dat$t.base)/(dat$t.opt - dat$t.base),0)
[1] 0.2788889 0.0000000
只是想知道我需要修复我的第一个代码?
由于