2015-03-25 7 views
0

Я хотел бы управлять построением значений в 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") 

enter image description here

Чтобы изменить порядок 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") 

enter image description here

А так как «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") 

enter image description here

Вы можете изменить аргумент «убывающий = 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). Как это может быть сделано ?

ответ

0

Я просто попытался указать уровни для v1 с использованием индексов и успешно получил c> b> a в качестве порядка в ggplot2. Я положил это выше вашего df $ v4 < - с (df ... и затем оставил остальную часть кода без изменений.

df$v1 <- factor(df$v1, 
       levels(df$v1)[c(3,2,1,4)]) 

 Смежные вопросы

  • Нет связанных вопросов^_^