R:用多个规则替换列/向量值的智能方法?
我有一些原始值,需要在几个阈值和计算之后重新编码为0-1。这是公式的样子: 我认为这只是说: 如果x<60->x=0 如果x>60&x=0.05*x-3 如果x>80->x=1 以下是我的方法:R:用多个规则替换列/向量值的智能方法?,r,function,dplyr,R,Function,Dplyr,我有一些原始值,需要在几个阈值和计算之后重新编码为0-1。这是公式的样子: 我认为这只是说: 如果xx=0 如果x>60&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 # R
# 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)
}
然而,由于我还有许多类似的函数/公式,我想知道是否有其他方法可以简化for循环和ifelse语句
我的数据将存储在data.frame中,所以使用dplyr和mutate将非常好。谢谢你的建议 从dplyr开始时,您可以使用case\u:
从dplyr执行以下操作时,可以使用case_:
使用基数R
df$recode <- ifelse(df$V_pine <= 60, 0, ifelse(df$V_pine > 80, 1, df$V_pine*0.05 - 3))
df
使用基数R
df$recode <- ifelse(df$V_pine <= 60, 0, ifelse(df$V_pine > 80, 1, df$V_pine*0.05 - 3))
df
你的解决方案看起来不错。我不认为你用的是正确的种子。我用的是同一个种子,我不知道为什么它给了我不同的数字。也许是因为他用samle.int创建了一个向量,然后我创建了一个数据帧?当我运行代码时,我得到了OP的V_pine值。也许再运行一次看看。你的解决方案看起来不错。我不认为你用的是正确的种子。我用的是同一个种子,我不知道为什么它给了我不同的数字。也许是因为他用samle.int创建了一个向量,然后我创建了一个数据帧?当我运行代码时,我得到了OP的V_pine值。也许再运行一次看看。
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
df$recode <- ifelse(df$V_pine <= 60, 0, ifelse(df$V_pine > 80, 1, df$V_pine*0.05 - 3))
df
V_pine recode
1 5 0.0
2 58 0.0
3 12 0.0
4 36 0.0
5 99 1.0
6 95 1.0
7 8 0.0
8 20 0.0
9 74 0.7
10 55 0.0