R:根据具有重复值的数字向量重新排序级别

时间:2015-01-29 12:41:00

标签: r dplyr factors

根据向量重新排序数据框(例如,用于正确的ggplot2绘图)已经多次出现,例如在这个好的线程here中。然而,我不能让这个工作 - 也许是因为某些价值观是重复的(至少这是R&#39的警告)。使用dplyr的玩具示例:

require(dplyr)
set.seed(8)
df <- tbl_df(data.frame(
  v1 = rnorm(8),
  v2 = rep(rnorm(4),2),
  v3 = rep(sample(LETTERS[],4),2)))

v1仅限于此处,以便所有列可能不同。 v3的级别现在是

levels(df$v3) 
[1] "A" "B" "C" "D"

我想根据包含重复值的v3重新排序v2

df[order(df$v2),"v2"][[1]]
[1] -3.0110517 -3.0110517 -0.7597938 -0.7597938 -0.5931743 -0.5931743  0.2920499  0.2920499

为什么这不起作用? :

df %>%
  mutate(v3 = factor(v3, levels=df[order(df$v2),"v2"][[1]]))

更新: 这也不起作用:

df %>%
  mutate(v3 = factor(v3, levels=unique(df[order(df$v2),"v2"][[1]])))

给予:

           v1         v2 v3
1 -0.08458607 -3.0110517 NA
2  0.84040013 -0.5931743 NA
3 -0.46348277 -0.7597938 NA
4 -0.55083500  0.2920499 NA
5  0.73604043 -3.0110517 NA
6 -0.10788140 -0.5931743 NA
7 -0.17028915 -0.7597938 NA
8 -1.08833171  0.2920499 NA

1 个答案:

答案 0 :(得分:4)

避免重复&#34;警告并创建了v3的有序因子(由v2排序),您可以这样做:

df %>%
  mutate(v3 = factor(v3, 
                     ordered=TRUE, 
                     levels=unique(df[order(df$v2),"v3"][[1]])))