R:按特定值对(某些)观察结果进行排序

问题描述 投票:0回答:1

我需要对数据帧的某些行重新排序。我有一个观察结果(名称)列表,我需要将其放在顶部。它是一个字符串变量,只需将其中的一部分放在顶部即可,其余部分可以按现有顺序排列。

示例数据集:

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 可能有用,但坦白说我不明白它们。

我希望有人可以向我展示如何循环/自动化我的解决方案,以便可以进行更多观察或向我展示一种完全不同的方式。

r sorting
1个回答
0
投票
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
© www.soinside.com 2019 - 2024. All rights reserved.