我正在运行一个计算产品描述之间相似性的R程序。程序的输入是一个包含1列的文件,其中包含产品描述列表,每个列都在一个单独的行上
我有另一个文件,其中包含产品标题列表,每个文件都在一个单独的行中。
使用dist函数,我计算了产品描述之间的相似性,它们作为矩阵存储在dist.mat中。
接下来,我想将产品标题加入到我计算过的相似度中。所以,我在名称中阅读了产品标题,然后:
dist.mat <- data.frame(dist.mat, row.names=Names[,1])
colnames(dist.mat) <- (row.names(dist.mat))
然后我收到一个错误: data.frame中的错误(dist.mat,row.names = Names [,1]): 提供的行名称长度错误
不确定如何修复它。我读了这个:Invalid 'row.names' length但我无法使用Sample $或as.character
修复错误我正在使用:lsa_0.73,SnowballC_0.5.1,tm_0.5-10
这是一个实际的例子: 产品说明文件:
产品标题文件:
如果有人可以提供帮助,那就太棒了
答案 0 :(得分:2)
正如错误消息所示,rownames与列数的长度不同,因为当我们添加getScript()
的新列时,显然会有一列。所以,我想这可以修复
row.names=Names[,1]
不要将 colnames(dist.mat)[-ncol(dist.mat)] <- row.names(dist.mat)
列作为最后一列,最好将其作为第一列
row.names
答案 1 :(得分:1)
矢量的距离矩阵(类dist
)显示为一行,一列比矢量长度小三角矩阵。
library(stringdist)
desc <- c("This glass can be used to drink whiskey",
"This is a stainless steel glass",
"This is a red rose")
Names <- c("Whiskeyglass", "glass", "rose")
dist.mat1 <- stringdistmatrix(desc)
dist.mat1
# 1 2
# 2 27
# 3 24 18
但是,dist
对象没有维度,因此无法为其分配行名和列名。
dim(dist.mat1)
# NULL
尝试命名dist
对象的行和列会导致错误。
row.names(dist.mat1) <- colnames(dist.mat1) <- Names
as.data.frame.default(x [[i]],可选= TRUE)出错: 不能强制类“”dist“”到data.frame
要获得您期望的结果,首先需要将dist
对象转换为matrix
。这会沿对角线添加零,因此也会添加行和列。
if(class(dist.mat1) == "dist"){
dist.mat2 <- as.matrix(dist.mat1)
row.names(dist.mat2) <- colnames(dist.mat2) <- Names
} else {
dist.mat2 <- dist.mat1
row.names(dist.mat2) <- colnames(dist.mat2) <- Names
}
dist.mat2
# Whiskeyglass glass rose
# Whiskeyglass 0 27 24
# glass 27 0 18
# rose 24 18 0
如果您的dist.mat
看起来像dist.mat1
,但其类别为matrix
,那么您需要选择哪些名称属于哪里。
row.names(dist.mat) <- Names[-1] # removing the first name for rows
colnames(dist.mat) <- Names[-length(Names)] # removing the last name for columns