我是R的新手,我想帮助找到更好的方法来编写我编写的以下代码。任何帮助,将不胜感激。
df$rank[between(df$score,0,1.2)] <- 1
df$rank[between(df$score,1.2,2.1)] <- 2
df$rank[between(df$score,2.1,2.9)] <- 3
df$rank[between(df$score,2.9,3.7)] <- 4
df$rank[between(df$score,3.7,4.5)] <- 5
df$rank[between(df$score,4.5,5.4)] <- 6
答案 0 :(得分:4)
您可以使用cut
:
df$rank <- cut(x = df$score,c(0,1.2,2.1,2.9,3.7,4.5,5.4,Inf),FALSE)
答案 1 :(得分:1)
library(dplyr)
set.seed(1234)
df <- data.frame(rank = rep(0, 15),
score = runif(15, 0, 6))
df
#> rank score
#> 1 0 0.68222047
#> 2 0 3.73379643
#> 3 0 3.65564840
#> 4 0 3.74027665
#> 5 0 5.16549230
#> 6 0 3.84186363
#> 7 0 0.05697454
#> 8 0 1.39530304
#> 9 0 3.99650255
#> 10 0 3.08550685
#> 11 0 4.16154775
#> 12 0 3.26984901
#> 13 0 1.69640150
#> 14 0 5.54060091
#> 15 0 1.75389504
df %>%
mutate(rank = case_when(between(score, 0, 1.2) ~ 1,
between(score, 1.2, 2.1) ~ 2,
between(score, 2.1, 2.9) ~ 3,
between(score, 2.9, 3.7) ~ 4,
between(score, 3.7, 4.5) ~ 5,
between(score, 4.5, 5.4) ~ 6))
#> rank score
#> 1 1 0.68222047
#> 2 5 3.73379643
#> 3 4 3.65564840
#> 4 5 3.74027665
#> 5 6 5.16549230
#> 6 5 3.84186363
#> 7 1 0.05697454
#> 8 2 1.39530304
#> 9 5 3.99650255
#> 10 4 3.08550685
#> 11 5 4.16154775
#> 12 4 3.26984901
#> 13 2 1.69640150
#> 14 NA 5.54060091
#> 15 2 1.75389504
由reprex package(v0.2.0)创建于2018-04-29。
答案 2 :(得分:0)
由于你没有添加一个可重复的例子,我创建了一个小例子(但请记住,你应该总是添加一个例子)。
从基地使用ifelse你可以这样做:
df = data.table(rank = c(1.2, 3.3, 2.5, 3.7, 5.8, 6, 3, 1.1, 0.5))
df$rank2 = ifelse(df$rank>0 & df$rank<=1.2, 1,
ifelse(df$rank>1.2 & df$rank<=2.1, 2,
ifelse(df$rank>2.1 & df$rank<=2.9, 3,
ifelse(df$rank>2.9 & df$rank<=3.7, 4,
ifelse(df$rank>3.7 & df$rank<=4.5, 5, 6)))))
最后一个ifelse应该是你的最大等级值,所以&#34; no&#34;参数将是最后一个范围。
如果这是一个重新出现的问题,你应该创建一个函数。
希望它有所帮助。