我使用MALLET了幾千行這是在輸出文本文件結果的話題分析(「topics.txt」)和一百多行,每一行由製表符分隔的變量是這樣的:如何通過重構MALLET輸出文件來創建表格?
Num1 text1 topic1 proportion1 topic2 proportion2 topic3 proportion3, etc.
Num2 text2 topic1 proportion1 topic2 proportion2 topic3 proportion3, etc.
Num3 text3 topic1 proportion1 topic2 proportion2 topic3 proportion3, etc.
這裏的實際數據的一個片段:
> dat[1:5,1:10]
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10
1 0 10.txt 27 0.4560785 23 0.3040853 20 0.1315621 21 0.03632624
2 1 1001.txt 20 0.2660085 12 0.2099153 8 0.1699586 13 0.16922928
3 2 1002.txt 16 0.3341721 2 0.1747023 10 0.1360454 12 0.07507119
4 3 1003.txt 12 0.5366148 8 0.2255179 18 0.1388561 0 0.01867091
5 4 1005.txt 16 0.2363206 0 0.2214441 24 0.1914769 7 0.17760521
我試圖使用[R這個輸出轉換成其中的主題是列標題的數據表,每個主題包含變量的值'比例'直接對右手si每個變量的'主題',每個'文本'的值。就像這樣:
topic1 topic2 topic3
text1 proportion1 proportion2 proportion3
text2 proportion1 proportion2 proportion3
或數據上面的代碼片段,就像這樣:
0 2 7 8 10 12 13 16 18 20 21 23 24 27
10.txt 0 0 0 0 0 0 0 0 0 0.1315621 0.03632624 0.3040853 0 0.4560785
1001.txt 0 0 0 0.1699586 0 0.2099153 0.1692292 0 0 0.2660085 0 0 0 0
1002.txt 0 0.1747023 0 0 0.1360454 0.0750711 0 0.3341721 0 0 0 0 0 0
1003.txt 0.0186709 0 0 0.2255179 0 0.5366148 0 0 0.138856 0 0 0 0 0
1005.txt 0.2214441 0 0.1776052 0 0 0 0 0.2363206 0 0 0 0 0.1914769 0
這是[R代碼我必須做的工作,從一個朋友送的,但它不爲我工作(我不知道有足夠的瞭解它自己修復):
##########################################
dat<-read.table("topics.txt", header=F, sep="\t")
datnames<-subset(dat, select=2)
dat2<-subset(dat, select=3:length(dat))
y <- data.frame(topic=character(0),proportion=character(0),text=character(0))
for(i in seq(1, length(dat2), 2)){
z<-i+1
x<-dat2[,i:z]
x<-cbind(x, datnames)
colnames(x)<-c("topic","proportion", "text")
y<-rbind(y, x)
}
# Right at this step at the end of the block
# I get this message that may indicate the problem:
# Error in c(in c("topic", "proportion", "text") : unused argument(s) ("text")
y[is.na(y)] <- 0
xdat<-xtabs(proportion ~ text+topic, data=y)
write.table(xdat, file="topicMatrix.txt", sep="\t", eol = "\n", quote=TRUE, col.names=TRUE, row.names=TRUE)
##########################################
我會非常感謝我如何能得到這個代碼工作的任何建議。我的問題可能與this one有關,也可能與this one有關,但我還沒有技能立即使用這些問題的答案。
除非你提供真正的數據結構,否則你不會得到太多的幫助....一個用於這些比例的數字。使用dput(head(dat,20)) –
感謝提示,我添加了一些內容。 – Ben
我還應該在使用'rm(list = ls(all = TRUE))'稍微改變了這個問題,以便在他的塊結束時,錯誤信息變成「在[.data.frame'(dat2,,i:z)中出錯:未定義的列被選中」。無論如何,我認爲@Ramnath的答案是一個很有前途的選擇。 – Ben