我有一个看起来像这样的数据
您可以在r进制中使用一行代码来完成此操作。使用rank
获取每个条目的顺序,找出排名低于4的,然后使用ifelse
根据此选择't'或'f'。
within(df, y <- ifelse(rank(x) < 4, "t", "f"))
#> x y
#> 1 3 t
#> 2 14 f
#> 3 1 t
#> 4 7 t
数据取自问题
df <- data.frame(x = c(3, 14, 1, 7), y = "f")
library(dplyr)
df <- data.frame(
x = c(3L, 14L, 1L, 7L),
y = c("f", "f", "f", "f")
)
df %>%
mutate(
y = case_when(
x == sort(x)[1] ~ "t",
x == sort(x)[2] ~ "t",
x == sort(x)[3] ~ "t",
TRUE ~ "f"
)
)
#> x y
#> 1 3 t
#> 2 14 f
#> 3 1 t
#> 4 7 t
由reprex包(v2.0.1)在2022-07-12创建
按x的升序排列数据框,然后编辑前三行的y值。
data <- data[order(x),]
for (i in 1:3) {
data$x[i] <- 't'
}