R、sapply()、函数和 if/else 问题

多里亚内夫

我必须对整个列进行操作。我需要一列中每一行的值“x”为:

  • 如果 x < 42,则为 0,
  • 如果 x > 364,则为 5,
  • 如果不满足这些条件,我需要将 5 乘以与另一列中 x 相同行位置的值。

我的操作结构是这样的:

rel$recentness_new <- sapply(rel$`Recentness data (# days)`, function(x) if (x < 42) {
  0
} else if (x > 364) {
    5
} else {
  rel$recentness_relative[x] * 5
})

正如您可以想象的那样,在第二个 if 之前一切正常,然后我得到奇怪的值作为输出。我不知道如何告诉 R 乘以同一行但在函数内的另一列中的值!

裂缝

ifelse() 可以一次处理整个列,并且可以堆叠它们,例如:

set.seed(1)
a <- runif(n = 100, min = 0, max = 400)
b <- rep(2, 100)
df <- data.frame(a,b)

df$c <- ifelse(df$a < 42, 0, ifelse(df$a > 364, 5, df$b * 5))
head(df)
#>           a b  c
#> 1 106.20347 2 10
#> 2 148.84956 2 10
#> 3 229.14135 2 10
#> 4 363.28312 2 10
#> 5  80.67277 2 10
#> 6 359.35587 2 10
Created on 2021-09-23 by the reprex package (v2.0.1)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章