我正在根据另一个变量的 TRUE/FALSE 状态计算一个新变量:
value<-c(2, 4, 5, 8, 2, 3, 1)
tf<-c(TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, TRUE)
df<-data.frame(value, tf)
下面的代码做我需要的(如果 'tf' 为 TRUE,则将 'value' 减半)...
df$newVals[which(df$tf)]<-df$value[which(df$tf)]/2
df$newVals[which(!df$tf)]<-df$value[which(!df$tf)]
……不过感觉太复杂了。有没有更简单的方法?
谢谢
最佳答案
这是一个非常简单的解决方案,没有 ifelse
:
df$newVals <- with(df, value / (tf + 1))
这个怎么运作?
如果 bool 值(如
tf
)与数学运算符一起使用,它们将被转换为数值( FALSE
被转换为 0
并且 TRUE
被转换为 1
)。因此命令 tf + 1
创建一个数值向量 1
s 和 2
s。 value
中的值除以这个新向量中的值。除以 1 不会改变原始值。
关于根据另一个变量中的 TRUE 或 FALSE 重新编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13291447/