2017-02-28 114 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。如果不是這種情況告訴我,我編輯代碼以將值添加爲列 –

相關問題