2013-10-14 4 views
0

У меня есть эта задача. В статье журнала рассматриваются различные темы. Мы присваиваем числовое значение, чтобы отразить силу отношений (ссылки) между конкретной темой и статьей. Переформатируйте необработанные данные в более удобную презентацию следующим образом.Использование awk или другой команды для объединения и обработки дубликатов

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 может помочь. Но как это сделать?

+0

есть ли еще темы или статьи? – philshem

+0

Как размер данных является проблемой для R, но awk больше подходит? – beroe

ответ

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" 
    } 
} 
+0

Работал отлично, спасибо! – mel

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) 
+0

Спасибо за решение в R тоже. Я буду использовать его позже. – mel

Смежные вопросы