【问题标题】:Ranking computed variables对计算变量进行排名
【发布时间】:2020-10-06 18:15:57
【问题描述】:

我正在使用来自Ecdat 包的Cigarette 数据集。我需要找到 1985 年至 1995 年间售出的包数/人均年排名的中位数。以及最低的,其中较高的排名被定义为具有更多的包/人均。

我尝试根据年份进行过滤,并使用 median(packpc) 计算中值包变量,并按该变异变量进行排列,但仍会收到错误消息。

有什么建议吗?

【问题讨论】:

  • 什么是“年排名中位数”?如果您有 100 个观察值并对它们进行排序,则中位数为 50。

标签: r dplyr


【解决方案1】:

你要找的是summarize:

library(Ecdat)
library(dplyr)
Cigarette %>% 
  filter(year>=1985, year<=1995) %>% 
  summarise(min=min(packpc), median=median(packpc), max=max(packpc))
#>       min   median     max
#> 1 49.2722 105.9096 197.994

当您将dplyr 标签添加到此问题时,您可能想查看有关此软件包的教程。

PS:如果这是你的作业,你应该清楚地说明它,这样我们就不会只是给出答案。

【讨论】:

    【解决方案2】:

    我想这个想法是获取各州每年的排名,然后找到这些年排名的中位数和最小值。

    由于数据集仅包含 1985 年到 1995 年的年份,因此不需要 filtering。

    所以我想出了这个相当丑陋的解决方案:

    ranks_perYear <- aggregate(packpc ~ year, Cigarette, rank)$packpc
    colnames(ranks_perYear) <- levels(Cigarette$state)
    medianRank <- apply(ranks_perYear, 2, median)
    minRank <- apply(ranks_perYear, 2, min)
    

    我实际上并不完全确定这里的状态是否正确分配。也许数据集必须事先按状态排序(例如,dplyr::arrange(Cigarette, state))。

    【讨论】:

      猜你喜欢
      • 2016-04-30
      • 2017-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多