我有一些原始值,我需要在几个阈值和计算之后将其重新编码为 0-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 loop
和ifelse
陈述?
我的数据将存储在data.frame
如此使用中,dplyr
并且mutate
会很棒。感谢您的建议!
您可以使用case_when
从dplyr
:
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)