提供的行名称在R

时间:2016-06-02 04:08:38

标签: r

我正在运行一个计算产品描述之间相似性的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

这是一个实际的例子: 产品说明文件:

  • 这种玻璃可以用来喝威士忌
  • 这是一种不锈钢玻璃
  • 这是一朵红玫瑰

产品标题文件:

  • Whiskeyglass
  • 玻璃
  • 玫瑰

Output Example

如果有人可以提供帮助,那就太棒了

2 个答案:

答案 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