2016-04-17 68 views
0

我正在跟蹤同行評議文獻中許多研究領域的處理,並處理了近1500篇論文。在我的數據文件中,我有25個主題的列,在數據文件中註釋1(存在)和0(不存在)。數據文件示意圖如下所示:同時計算幾個組的頻率

TITLE AUTHORS JOURNAL YEAR ... TOPIC1 TOPIC2 TOPIC3 TOPIC4 ... TOPIC25 
'xxx' 'yyy' 'zzz' 2002   1  0  0  1   0 
'xxx' 'yyy' 'zzz' 2012   0  0  0  0   1 
'xxx' 'yyy' 'zzz' 2002   0  0  1  1   0 
'xxx' 'yyy' 'zzz' 2015   1  0  0  0   0 
'xxx' 'yyy' 'zzz' 2015   0  0  0  0   0 
'xxx' 'yyy' 'zzz' 2013   0  0  1  1   1 
'xxx' 'yyy' 'zzz' 2012   1  0  0  0   0 
'xxx' 'yyy' 'zzz' 2012   0  0  1  0   1 

我需要計算的各種主題的頻率在報紙上,並用數據幀看起來像這樣結束:

TOPIC count 
TOPIC1 7 
TOPICS2 19 
. 
. 
TOPIC25 15 

我一直在谷歌上搜索,閱讀和嘗試一些不同的東西,但迄今沒有任何工作,因此沒有發佈代碼。

任何幫助,不勝感激...

+1

是否預期輸出反映輸入示例?也許'lapply(df1 [grep(「^ TOPIC \\ d +」,names(df1))],sum)' – akrun

+0

我不確定你的意思,但名稱並不是真正的TOPICS1:TOPIC25,但它們都有不同的名字 - > POPABU,POPTR,POPSTAT,HARV,CC,HAB,POLL,ZOO,PHYS,TEK等 – Dag

+0

如果是這種情況,您應該在示例中說明。如果你沒有指定它,我們怎麼知道你在數據中有'POPABU','POPTR'等。所以,如果你知道列索引,而不是'grep',你可以做'lapply(df1 [5:ncol(df1)],sum)' – akrun

回答

1

我們可以遍歷感興趣的列,得到sumstack它來創建一個兩列「data.frame」。

res <- setNames(stack(lapply(df1[grep("^TOPIC\\d+", names(df1))], 
      sum))[2:1], c("TOPIC", "count")) 
head(res,2) 
# TOPIC count 
#1 TOPIC1  7 
#2 TOPIC2  19 

如果列名不具有任何的圖案,使用列索引子集列,即假設,如果POPABU是第5列,POPGEN是最後一列,

res <- setNames(stack(lapply(df1[5:ncol(df1)], 
      sum))[2:1], c("TOPIC", "count")) 
+0

這是如何工作時,真正的主題名稱在數據文件中是這樣的:POPABU,POPTR,POPSTAT,HARV,CC,HAB,POLL ,ZOO,PHYS,TEK,HWC,DIS,ANA,POPGEN等? – Dag