2017-02-28 110 views
-1

我对R非常陌生,很难用它来进行基本的数据分析。如何找到R表中每个列的前N个值?

如果我打开一个表格,我怎么能找到列前10个值,每个值的出现频率&计数一起?另外,我还想知道空白的频率。

使用 “Forbes2000”,从 “HSAUR” 包...

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

的数据包含8列,其中一些( “等级”, “姓名”, “销售” 等)每行独特。但是,某些栏目(“国家”,“类别”)并非唯一。

因此,对于每一列,我想找出前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了一段时间,发现了几个排名的问题,他们他们是2D的性质(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) 

似乎并没有通过所有列的工作循环。

+3

写一个小功能'foo',你想要做的一列,然后'lapply(Forbes2000,富)'将其应用到每一列,并在一个不错的列表中返回的结果是什么。 – Gregor

+1

我打算写出格雷戈尔刚刚做的同样的评论。我认为这是一个很好的练习,因为这些都是必要和基本的R技能 - 甚至是用于数据分析的任何语言的必备和基本技能。 –

+0

如果'lapply'看起来太奇怪了,请在列上写一个for循环。并看看一个很好的在线R文本,如哈德利的高级R. –

回答

0

是这样的?

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) 
+0

非常有帮助!正是我正在寻找的...我只需要添加与这些排名/百分比一起的值... –

+0

您应该看到值ad row.names。如果不是这种情况告诉我,我编辑代码以将值添加为列 –

相关问题