使用dataframe列更改因子的级别

使用dataframe列更改因子的级别,r,dplyr,R,Dplyr,如何使用数据框的列来更改因子的级别 下面的示例是对原始数据集的简化,但显示了我试图实现的目标 数据集结构 df <- data.frame(X=c("DFV","TUG","WQD","PRF","NJK"),Y=c(2000,5000,3000,1000,4000)) df您的方法是正确的,但是因为您想对行进行排序,所以在排列中使用它: library(dplyr) df %>%

如何使用数据框的列来更改因子的级别

下面的示例是对原始数据集的简化,但显示了我试图实现的目标

数据集结构

df <- data.frame(X=c("DFV","TUG","WQD","PRF","NJK"),Y=c(2000,5000,3000,1000,4000))

df您的方法是正确的,但是因为您想对行进行排序,所以在
排列中使用它:

library(dplyr)
df %>% arrange(factor(X, levels = ndf$X))

#    X    Y
#1 TUG 5000
#2 NJK 4000
#3 WQD 3000
#4 DFV 2000
#5 PRF 1000
您还可以使用
匹配

df %>% arrange(match(X, ndf$X))

有两个独立的任务:i)基于
Y
设置
X
的级别;ii)重新排列
df
的行。您的问题是关于更改级别,但您的“期望输出”似乎是关于重新排序数据集。请澄清您是否需要第一、第二或两者

使用
数据更改级别。表

require(data.table)
setDT(df)
df[,X:=factor(X, levels=X[order(-Y)])]

(请注意,如果您有任何重复的
X
)值,则它将不起作用。

最后需要的解决方案是:


df%>%arrange(factor(X,levels=unique(ndf$X)))

您好,答案没有解决我的问题,但您确认我走在正确的轨道上。为什么它没有解决您的问题?它给出了您所显示的预期输出。您是对的。输出是正确的。原来的问题需要多一点,但我可以考虑你的答案正确的例子。嗨,你的评论重复值x是有用的。我没想过。
df %>% arrange(match(X, ndf$X))
require(data.table)
setDT(df)
df[,X:=factor(X, levels=X[order(-Y)])]