根据另一个变量中的 TRUE 或 FALSE 重新编码

标签 r

我正在根据另一个变量的 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/

相关文章:

r - 放置在 ggmap 坐标上的小 ggplot2 图

r - 如何针对大型数据表优化 R 中的 for 循环

使用 R 中重新出现的列名称从宽到长 reshape 数据框

Rstudio 正在命令行中复制命令

r - 使用 Caret 包但在库中出现错误(e1071)

r - 如何索引R矩阵而不将其恢复为向量

重新编码具有许多值(包括 NA)的数值变量

拨浪鼓R包: difference between risk and weight variable role?

r - 将数据框列作为参数传递给 mutate 函数

R:字符变量必须在 .C/.Fortran 中重复