2016-04-17 1 views
0

私はピアレビューされた文献の多くの研究分野の取り扱いを追跡しており、約1500の論文を処理しています。私のデータファイルには、1(存在)と0(不在)のデータファイルに注釈が付けられた25のトピックの列があります。同時にいくつかのグループのカウント頻度

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

我々が関心の列をループすることができ、2列「data.frame」を作成するためにsumstackそれを得ます。

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

関連する問題