R 根据两个值之间还是低于一个值来更改数据帧中的条目

R 根据两个值之间还是低于一个值来更改数据帧中的条目,r,dataframe,R,Dataframe,我有一个数据框,其中一列是距离,另一列是分数,例如 Distance Scores 1000. 1 1500. 1 等等 我有一个分段函数,它说: 如果距离>=1000,则将分数更改为零 如果距离在300和1000之间,将分数更改为0.5(1000-距离值) 如果距离小于300,则更改为0.5(1000-300) 我尝试了以下方法: DF$Scores[DF$Distance>=1000] <- 0 DF$Scores[DF$Distance>300 &

我有一个数据框,其中一列是距离,另一列是分数,例如

Distance Scores
1000.    1
1500.    1
等等

我有一个分段函数,它说: 如果距离>=1000,则将分数更改为零 如果距离在300和1000之间,将分数更改为0.5(1000-距离值) 如果距离小于300,则更改为0.5(1000-300)

我尝试了以下方法:

DF$Scores[DF$Distance>=1000] <- 0
DF$Scores[DF$Distance>300 & DF$Distance<1000] <-0.5(1000-DF$Distance)
DF$Scores[DF$Distance<=300]<- 0.5*(1000 -300 )

DF$Scores[DF$Distance>=1000]300&DF$Distance我建议这样一种方法:

#Data
df <- structure(list(Distance = c(1000, 1500), Scores = c(1L, 1L)), class = "data.frame", row.names = c(NA, 
-2L))

只要小心,如果您有许多情况,嵌套
ifelse
可能会很复杂。

添加其他可能发生的情况,并提供一个
dplyr
解决方案,这有时更容易让人阅读

df%
变异(分数=情况)(
距离>=1000~0,
距离<1000且距离>300~.5*(1000-距离),
距离分数
#> 1     1000      0
#> 2     1500      0
#> 3      500    250
#> 4      250    350

第一行和第三行应该在你改变分数而不是距离时起作用。第二行的安装尝试:
i 300&DF$Distance
df$Scores <- ifelse(df$Distance>=1000,0,
                    ifelse(df$Distance>300 & df$Distance<1000,0.5*(1000-df$Distance),
                           ifelse(df$Distance<=300,0.5*(1000 -300 ),NA)))
  Distance Scores
1     1000      0
2     1500      0