Я хотел бы управлять построением значений в v3
(в дальнейшем ниже) с использованием ggplot2 в соответствии с уровнями факторов (v4
), т.е. порядок заговора.В R найдите искажения кадров данных из нескольких столбцов, используя собственные векторы сортировки для управления построением ggplot2
df <-
data.frame(
v1=c("a","b","c","a"),
v2=c("z", "x", "x", "y"),
v3=c(1,2,3,4),
v4=factor(c("id1", "id2", "id3", "id4")))
require(ggplot2)
ggplot(df, aes(x=v4,y=v3))+
geom_bar(stat="identity",position="dodge")
Чтобы изменить порядок v4
в сюжете сводится к тому, с указанием уровней v4
. Если я хотел бы построить в соответствии с v1
его straith-вперед, чтобы изменить уровни:
df$v4 <- with(df,factor(v4, levels= v4[order(df$v1)]))
ggplot(df, aes(x=v4,y=v3))+
geom_bar(stat="identity",position="dodge")
А так как «id1» и «id4» имеют значение v1
«а» мы могли бы выбрать разрешить эту связь с помощью второго вектора, скажем v2
, в аргументе order()
:
df$v4 <- with(df,factor(v4, levels= v4[order(df$v1, df$v2)]))
ggplot(df, aes(x=v4,y=v3))+
geom_bar(stat="identity",position="dodge")
Вы можете изменить аргумент «убывающий = F» в order()
, чтобы отменить порядок сортировки, но как вы можете указать пользовательский порядок сортировки. Например. если вы выше не хотите алфавитного порядка v1
, а скорее c> b> a (сначала c, затем b, затем a)? Очевидно, что подмножество с использованием match (вдоль: df [match (c («c», «b», «a»), df $ v1), «v4»]) работает только, если у вас есть уникальные значения в v1
. Кажется, я пропустил аргумент «by» для порядка(), например: order (df $ v1, df $ v2, by = c (s1, s2)), где «s1» и «s2» являются векторами, чтобы найти порядок v1
и v2
(в нашем случае «s1» < - c («c», «b», «a»)). В принципе мне нужно найти индексы кадра данных с использованием более чем одной переменных/столбцом (в нашем df
: v1
, и если связи решительность по v2
) с помощью пользовательской сортировки векторов (в нашем df
это s1
и s2
). Как это может быть сделано ?