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