gpt4 book ai didi

r - 如何通过重组 MALLET 输出文件来创建表格?

转载 作者:行者123 更新时间:2023-12-04 10:57:52 26 4
gpt4 key购买 nike

我正在使用 MALLET 进行主题分析,它在几千行和一百左右行的文本文件(“topics.txt”)中输出结果,其中每行由制表符分隔的变量组成,如下所示:

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 将此输出转换为数据表,其中主题是列标题,每个主题包含变量“比例”的值,直接位于每个变量“主题”的右侧,对于每个“文本”的值。像这样:
      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 代码我必须完成这项工作,从 friend 那里发送,但它对我不起作用(我对它的了解不够,无法自己修复):
##########################################
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 相关,但我还没有技能立即使用这些问题的答案。

最佳答案

这是解决您问题的一种方法

 dat <-read.table(as.is = TRUE, header = FALSE, textConnection(
"Num1 text1 topic1 proportion1 topic2 proportion2 topic3 proportion3
Num2 text2 topic1 proportion1 topic2 proportion2 topic3 proportion3
Num3 text3 topic1 proportion1 topic2 proportion2 topic3 proportion3"))

NTOPICS = 3
nam <- c('num', 'text',
paste(c('topic', 'proportion'), rep(1:NTOPICS, each = 2), sep = ""))

dat_l <- reshape(setNames(dat, nam), varying = 3:length(nam), direction = 'long',
sep = "")
reshape2::dcast(dat_l, num + text ~ topic, value_var = 'proportion')

num text topic1 topic2 topic3
1 Num1 text1 proportion1 proportion2 proportion3
2 Num2 text2 proportion1 proportion2 proportion3
3 Num3 text3 proportion1 proportion2 proportion3

编辑。无论比例是文本还是数字,这都将起作用。您也可以修改 NTOPICS以适合您拥有的主题数量

关于r - 如何通过重组 MALLET 输出文件来创建表格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8058402/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com