根据矢量(例如用于正确的重排序数据帧ggplot2绘图)已高达上SO几次,例如在这个漂亮的线程在这里。但是,我无法使它正常工作-可能是因为某些值是重复的(至少这是R的警告所针对的)。使用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)))
Run Code Online (Sandbox Code Playgroud)
v1仅在此处,以便所有列的跨度可能不同。v3现在的水平
levels(df$v3)
[1] "A" "B" "C" "D"
Run Code Online (Sandbox Code Playgroud)
我想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
Run Code Online (Sandbox Code Playgroud)
为什么这不起作用?:
df %>%
mutate(v3 = factor(v3, levels=df[order(df$v2),"v2"][[1]]))
Run Code Online (Sandbox Code Playgroud)
更新:也不起作用:
df %>%
mutate(v3 = factor(v3, levels=unique(df[order(df$v2),"v2"][[1]])))
Run Code Online (Sandbox Code Playgroud)
给出:
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
Run Code Online (Sandbox Code Playgroud)
为了避免出现“重复”警告,并且还创建了一个有序因数v3(由排序v2),您可以执行以下操作:
df %>%
mutate(v3 = factor(v3,
ordered=TRUE,
levels=unique(df[order(df$v2),"v3"][[1]])))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
861 次 |
| 最近记录: |