同时计算几个组的频率

时间:2016-04-17 12:59:17

标签: r

我正在跟踪同行评审文献中许多研究领域的处理,并处理了近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 个答案:

答案 0 :(得分: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"))