鉴于数据:
library(data.table)
DT = data.table(category=LETTERS[1:3], b=1:3)
DT
# category b
# 1: A 1
# 2: B 2
# 3: C 3
Run Code Online (Sandbox Code Playgroud)
使用dplyr
,如何重新排列行来获得特定的顺序c("C", "A", "B")
中category
?
# category b
# 1: C 3
# 2: A 1
# 3: B 2
Run Code Online (Sandbox Code Playgroud)
Hen*_*rik 68
首先,创建一个包含所需顺序字母的向量.然后match
*带有要变量的变量的向量.match
返回(第一)匹配的索引,可以插入slice
:
library(dplyr)
# create a vector with letters in the desired order
x <- c("C", "A", "B")
DT %>%
slice(match(x, category))
# category b
# 1 C 3
# 2 A 1
# 3 B 2
Run Code Online (Sandbox Code Playgroud)
另一种方法是将"category"转换为a factor
,设置levels
为所需的顺序,并使用arrange
:
DT %>%
mutate(category = factor(category, levels = x)) %>%
arrange(category)
# category b
# 1 C 3
# 2 A 1
# 3 B 2
Run Code Online (Sandbox Code Playgroud)
*该match
方法的灵感来自于这个答案.
小智 5
另一种选择可能如下,请注意,排列可以采用新索引的列表。
library(dplyr)
df <- data.frame(category = LETTERS[1:3], b = 1:3, stringsAsFactors = F)
# create a vector with letters in the desired order
x <- c("C", "A", "B")
df %>%
arrange(sapply(category, function(y) which(y == x))
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
30120 次 |
最近记录: |