【问题标题】:R How to combine dataframe factors with respect to their frequencyR如何根据频率组合数据帧因子
【发布时间】:2018-09-08 19:30:21
【问题描述】:

我对 R 很陌生,但我是 python 的长期用户。我在网上到处寻找,并且一直在为一些看起来应该如此简单的事情苦苦挣扎。

所以我有一个名为“运动”的 R 数据框:

  person  activity
1    1    running
2    2    running
3    3    walking
4    4    flying
5    5    walking
6    6    running

注意:人员类别不是指“6 个人在跑步”,而是“6 号人在跑步”

我需要这个作为降序条形图,并且我想使用基本的 R 图形。因此,使用函数 bargraph(),将人作为“身高”或频率。问题是,到目前为止,它只会将活动视为单独的,并吐出一个由 6 个条形图组成的图表,每个活动单独列出。

到目前为止,我已经尝试使用诸如 rev()、sort()、order() 之类的函数将活动分组在一起,并降低数据。我尝试将数据框转换为矩阵,或将列单独用作向量以满足 barplot() 的矩阵/向量要求,但 barplot(movement$person) 只是执行上述操作。

到目前为止,我最幸运地将数据框转换为表格,并像这样使用它:

bargraph(table(movement))

但是,这并没有给我降序形式的数据,而且我不知道如何使表格降序。我得到这样的图表:

我希望从左到右依次为:跑步、步行、飞行。

有没有一种简单的方法可以做到这一点,还是我需要重组整个数据框?

【问题讨论】:

    标签: r plot


    【解决方案1】:

    我们可以通过指定levels 转换为factor

    movement$activity <- factor(movement$activity, levels = unique(movement$activity))
    

    然后做barplot

    barplot(table(movement))
    

    数据

    movement <- structure(list(person = 1:6, activity = c("running", "running", 
    "walking", "flying", "walking", "running")), class = "data.frame", 
    row.names = c("1", "2", "3", "4", "5", "6"))
    

    【讨论】:

    • 谢谢,这确实解决了我的问题。我了解“级别”,但 unique() 到底在做什么?
    • @Destroxia 假设,你有一个向量 v1 &lt;- c('a', 'b', 'a', 'd', 'b'); unique(v1)#[1] "a" "b" "d" 。在数据集中,您希望顺序位于 'running', 'walking', 'flying' 中,这恰好与 unique 元素的相同顺序对齐。
    • @Destroxia 如果订单是偶然发生的,那么您可以通过首先获取活动频率来更改级别tbl &lt;- table(movement$activity); movement$activity &lt;- factor(movement$activity, levels = names(sort(tbl, decreasing = TRUE)))
    猜你喜欢
    • 2019-04-14
    • 1970-01-01
    • 2021-06-27
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    • 2014-05-25
    • 1970-01-01
    相关资源
    最近更新 更多