我正在跟踪同行评审文献中许多研究领域的处理,并处理了近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
我一直在谷歌搜索,阅读和尝试一些不同的东西,但到目前为止没有任何工作,因此没有发布代码。
任何帮助都非常感谢...
答案 0 :(得分:1)
我们可以遍历感兴趣的列,获取sum
和stack
以创建两列“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"))