我需要对数据帧的某些行重新排序。我有一个观察结果(名称)列表,我需要将其放在顶部。它是一个字符串变量,只需将其中的一部分放在顶部即可,其余部分可以按现有顺序排列。
示例数据集:
df <- data.frame(name = c("Alan", "Betty", "Clyde", "Diane", "Eric",
"Francine", "George", "Harriett"),
height = c(60, 68, 70, 66, 68, 70, 63, 64))
我无法从最低到最高排序,反之亦然,并且字符串中没有任何部分是这些观察结果所独有的。我只关心一些观察结果的顺序,而不是全部。对于我真正关心的那些,它们必须按特定的顺序排列 - 它们以错误的顺序排列在顶部是不够的。
长版:
df$order[df$name == "Betty"] <- 1
df$order[df$name == "Diane"] <- 2
df$order[df$name == "Alan"] <- 3
df$order[df$name == "Clyde"] <- 4
df <- arrange(df, order)
df$order <- NULL
上面的代码可以工作,但是有太多的观察结果让我无法轻松地复制/粘贴一堆行。
我尝试将上面的代码作为 for 循环(在名称列表或 1:4 上循环),但我无法让它工作。与 ifelse() 类似。 lapply 或 sapply 可能有用,但坦白说我不明白它们。
我希望有人可以向我展示如何循环/自动化我的解决方案,以便可以进行更多观察或向我展示一种完全不同的方式。
library(forcats)
library(dplyr)
nm <- c("Betty", "Diane", "Alan", "Clyde")
df |>
mutate(name = fct_relevel(name, !!nm)) |>
arrange(name)
# name height
# 1 Betty 68
# 2 Diane 66
# 3 Alan 60
# 4 Clyde 70
# 5 Eric 68
# 6 Francine 70
# 7 George 63
# 8 Harriett 64