0

我有这个任务。一篇杂志文章涵盖了各种主题。我们分配一个数值来反映特定主题和文章之间的关系(链接)强度。将原始数据重新格式化为更方便的表示形式,如下所示。

INPUT DATA (tab-separated)

Theme  Article  Link_strength
A      aaa      2
A      bbb      8
B      bbb      7
C      aaa      3      

OUTPUT DATA

Article Theme_A Theme_B Theme_C
aaa     2       0       3
bbb     8       7       0

我试过 R,但数据大小是个问题所以,我需要弄清楚 awk 命令可能会有所帮助。但是怎么做呢?

4

2 回答 2

2

尝试以下操作:

awk -f format.awk input.txt

input.txt您的输入数据文件在哪里,并且format.awk

BEGIN {
    OFS="\t"
}
NR > 3 {
    themes[$1]++
    ka[$2]++
    art[$2,$1]=$3
}

END {
    printf "%s%s", "Article",OFS
    for (j in themes) {
        printf "Theme_%s%s", j, OFS
    }
    printf "\n"
    for (i in ka) {
        printf "%s%s", i, OFS
        for (j in themes) {
            printf "%d%s", art[i,j],OFS
        }
        printf "\n"
    }
}
于 2013-10-14T19:26:44.190 回答
0

R中的解决方案:

library(reshape)
cast(df,Article ~ Theme,fill=0)

输出

  Article A B C
1     aaa 2 0 3
2     bbb 8 7 0

使用相同的东西reshape2

library(reshape2)
dcast(df,Article ~ Theme,value.var='Link_strength',fill=0)
于 2013-10-15T01:52:40.697 回答