【问题标题】:Sorting a dotchart with matrix input in R用R中的矩阵输入对点图进行排序
【发布时间】:2011-01-11 04:28:45
【问题描述】:

当您的输入是矩阵时,如何生成分组克利夫兰点图(点图),其中数据在每个子组中从最高到最低排序?

例如,R 有一个很好的内置点图示例,使用带有矩阵作为输入的组:

dotchart(VADeaths, main = "Death Rates in Virginia - 1940")

在此特定示例中,数据已按每个组(农村男性、农村女性等)的每个类别进行排序。但是,如果不是,那么生成图以使每个子组中的数据点从最高到最低排序的 R 命令是什么?

【问题讨论】:

    标签: r


    【解决方案1】:

    如果您不想像@DWin 建议的那样按列名对数据进行排序,而只对数字数据进行排序,您可以尝试:

    # get data
    data <- VADeaths[sample(1:5), ]
    # order data by first row's numeric values
    data <- data[order(data[,1]),]
    dotchart(data)
    

    注意:这将仅按第一列对数据框进行排序!如果不为每列指定不同的行名,就不可能对表中的每一列进行排序,这对于表类来说绝对是不可能的。

    如果您坚持原来的问题:我建议按列拆分数据,为每个排好序的列绘制点图并将它们堆积在布局中。

    【讨论】:

    • 有没有简单的拆分和堆叠方法?
    • @lorin - 这应该是一个能够深入回答的新问题,但简而言之:照顾?split?par 函数。稍后查找mfrowmfcol
    【解决方案2】:

    这显示了具有任意行顺序的矩阵的创建以及如何将其恢复到正确的顺序。

    > set.seed(123)
    > VA2 <- VADeaths[sample(1:5), ]
    > VA2
          Rural Male Rural Female Urban Male Urban Female
    55-59       18.1         11.7       24.3         13.6
    65-69       41.0         30.9       54.6         35.1
    70-74       66.0         54.3       71.1         50.0
    60-64       26.9         20.3       37.0         19.3
    50-54       11.7          8.7       15.4          8.4
    > VA2[order(rownames(VA2)), ]
          Rural Male Rural Female Urban Male Urban Female
    50-54       11.7          8.7       15.4          8.4
    55-59       18.1         11.7       24.3         13.6
    60-64       26.9         20.3       37.0         19.3
    65-69       41.0         30.9       54.6         35.1
    70-74       66.0         54.3       71.1         50.0
    

    如果您遇到混乱的列名,但不是具有所需词汇顺序的东西,您可以使用带有“[”的正确顺序的字符向量

    > c2 <- c("Rural Male",   "Rural Female", "Urban Male" ,  "Urban Female")
    > VA3 <- VA2[ , sample(1:4)]
    > VA3
          Rural Male Rural Female Urban Male Urban Female
    55-59       18.1         11.7       24.3         13.6
    65-69       41.0         30.9       54.6         35.1
    70-74       66.0         54.3       71.1         50.0
    60-64       26.9         20.3       37.0         19.3
    50-54       11.7          8.7       15.4          8.4
    > VA3[ , c2]
          Rural Male Rural Female Urban Male Urban Female
    55-59       18.1         11.7       24.3         13.6
    65-69       41.0         30.9       54.6         35.1
    70-74       66.0         54.3       71.1         50.0
    60-64       26.9         20.3       37.0         19.3
    50-54       11.7          8.7       15.4          8.4
    

    【讨论】:

    • 这不是我想要排序的行名或列名,我想要的是为点图中每个子组排序的数据值。我希望每个分组的点从最大值到最小值显示。问题是这不能简单地通过操纵矩阵来完成,因为排序会因子组而异。
    • 然后根据您的兴趣进行排序。所呈现的矩阵列和行的顺序决定了 dotplot 的 y 轴的布局。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-09
    • 2021-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    相关资源
    最近更新 更多