R:通过多个规则替换列/向量值的智能方法?

may*_*cca 1 r function dplyr

我有一些原始值,我需要在几个阈值和计算之后将其重新编码为 0-1。这是公式的样子: 在此处输入图片说明

我认为这只是说:

  • 如果 x < 60 -> x = 0
  • 如果 x > 60 & <= 80 -> x = 0.05*x -3
  • 如果 x > 80 -> x = 1

这是我的方法:

# V is from 0-600 m3/ha
set.seed(3)
V_pine = sample.int(100, 10)  # generate 10 random numbers up to 100

> V_pine
[1]  5 58 12 36 99 95  8 20 74 55

# Recode values following multiple ifelse statements
for (i in V_pine){
  if (i <= 60) {
    i <- 0
    } else if (i > 60 & i<= 80) {
      i <- (0.05* i )-3
    } else if (i > 80) {
      i<- 1
    }
  print(i)
}
Run Code Online (Sandbox Code Playgroud)

似乎这带来了正确的结果:

Output: 
0 0 0 0 1 1 0 0 0.7 0
Run Code Online (Sandbox Code Playgroud)

然而,由于我还有许多类似的函数/公式,我想知道是否有另一种方法可以简化for loopifelse陈述?

我的数据将存储在data.frame如此使用中,dplyr并且mutate会很棒。感谢您的建议!

DJV*_*DJV 5

您可以使用case_whendplyr

library(tidyverse)

#Using your data as data.frame
set.seed(3)
df <- data.frame(V_pine = sample.int(100, 10))

df %>% 
  mutate(
    recode = case_when(
      V_pine < 60 ~ 0, 
      V_pine > 60 & V_pine <= 80  ~ 0.05*V_pine-3, 
      V_pine > 80  ~ 1, 
    ))
Run Code Online (Sandbox Code Playgroud)

输出:

     V_pine recode
1      17      0
2      80      1
3      38      0
4      32      0
5      58      0
6      96      1
7      12      0
8      28      0
9      54      0
10     95      1
Run Code Online (Sandbox Code Playgroud)