【问题标题】:How do I find the Top N values for every column in a table in R? [closed]如何找到 R 表中每一列的前 N ​​个值? [关闭]
【发布时间】:2017-02-28 18:49:59
【问题描述】:

我对 R 非常陌生,并且在使用它进行基本数据分析时遇到了困难。

如果我加载一个表格,我如何才能找到 每个 列的前 10 个值,以及每个值的出现频率和出现次数?另外,我还想知道空格出现的频率。

使用“HSAUR”包中的“Forbes2000”...

    data("Forbes2000", package = "HSAUR")
    head(Forbes2000)

数据包含 8 列,其中一些列(“rank”、“name”、“sales”等)每行都是唯一的。但是,某些列(“国家”、“类别”)不是唯一的。

因此,对于每一列,我想找出前 10 个唯一值、它们的频率百分比和计数。此外,如果该列包含至少一个空白/NULL,则显示相同信息的附加行。如果每一行都是唯一的,则将结果限制为 10 行。

所以,类似...(下面的数字组成)

   country              percentage   rank
   United States        85.35%       1
   United Kingdom       6.31%        2
   Canada               3.12%        3

   category             percentage   rank
   Banking              55.28%       1
   Conglomerates        20.75%       2
   Insurance            12.23%       3
   NULL                 3.32%        4
   Oil & gas operations 2.11%        5
   ...(etc)...

   sales                percentage   rank
   1234.56              0.05%        1
   987.65               0.05%        1
   986.32               0.05%        1
   822.12               0.05%        1
   ...(etc)...

我已经查看了 StackOverflow 一段时间,发现了一些排名问题,它们本质上是二维的 (How to return 5 topmost values from vector in R?),或者是单个列 (how to find the top N values by group or within category (groupwise) in an R data.frame)。我正在寻找一种本质上是 3D 的解决方案,如附加

    names(Forbes2000)

似乎无法遍历所有列。

【问题讨论】:

  • 写一个小函数 foo 对一列执行你想要的操作,然后 lapply(Forbes2000, foo) 将它应用到每一列并在一个漂亮的列表中返回结果。
  • 我打算写和 Gregor 刚才写的一样的评论。我认为这是一个很好的练习,因为这些是必要的基本 R 技能——甚至是用于数据分析的任何语言的必要和基本技能。
  • 如果lapply 看起来太奇怪了,在列上写一个for循环。看看像 Hadley's Advanced R 这样的优秀在线 R 文本。
  • 感谢您的回复。我希望这不会被标记为“太宽泛”。我正在尝试克服使用 R 来了解如何做到这一点时需要克服的“激活能量”(驼峰)。不幸的是,我没有看到太多关于如何对 R 中的多个字段执行多项操作(排名和百分比),因此我在上面包含了 SO 链接...

标签: r


【解决方案1】:

这样的?

library("HSAUR")
f<-function(x){
Freq<-(head(sort(table(x),decreasing=TRUE)*100/length(x),10))
rank<-1:10
rank<-rank-cumsum(duplicated(Freq))
data.frame(perc=paste(Freq,"%",sep=""),rank)
}
lapply(Forbes2000,f)

【讨论】:

  • 非常有帮助!正是我正在寻找的...我只需要添加与这些排名/百分比相关的值...
  • 您应该会看到值 ad row.names。如果不是这种情况,请告诉我,我将代码编辑为将值添加为列
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 2019-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多