使用dist()和as.matrix()时标记行和列名称

时间:2014-11-24 21:19:06

标签: r matrix dataframe distance

我想知道在使用dist()和as.matrix()时是否有一个特定的参数来输出包含所有行名的表。这就是我的意思:

first=c('john', 'judy', 'jenny')
second=c(3,6,9)
third = c(2,4,6)
df = data.frame(first,second,third)

我有一个名为df的数据框:

 first second third
1  john      3     2
2  judy      6     4
3 jenny      9     6

这是我想要的输出:

      john       judy   jenny
john 0.000000 4.41588 8.831761
judy 4.415880 0.00000 4.415880
jenny 8.831761 4.41588 0.000000

这是我的代码:

df.dist=dist(df)
df.dist=as.matrix(df.dist, labels=TRUE)
df.dist

这就是R给我的东西:

      1       2        3
1 0.000000 4.41588 8.831761
2 4.415880 0.00000 4.415880
3 8.831761 4.41588 0.000000

我想知道在比较不同的条目时是否存在重命名列的特定函数或参数,或者我们是否只需要自己编写代码?

我输入的另一件事是:as.matrix是有一个名为dimnames的参数,可以让你输入cols和rows的名字列表。但我不知道这是不是一个好主意,因为我的数据集有大约100多个条目。

非常感谢任何帮助。被困了一会儿。

2 个答案:

答案 0 :(得分:6)

将这些名称添加为行名和列名只需要一行代码:

df<-read.table(header=T,text='first second third
1 john      3     2
2 judy      6     4
3 jenny      9     6')

df.dist=dist(df)
df.dist=as.matrix(df.dist, labels=TRUE)
colnames(df.dist) <- rownames(df.dist) <- df[['first']] #this is the only line

> df.dist
          john    judy    jenny
john  0.000000 4.41588 8.831761
judy  4.415880 0.00000 4.415880
jenny 8.831761 4.41588 0.000000

dimnames将名称添加为属性,因此您可能会更好地使用上述内容。

答案 1 :(得分:0)

您还可以将第一列设置为数据框rownames,然后使用dist

rownames(df) <- df$first
as.matrix(dist(df[-1]))

#          john     judy    jenny
#john  0.000000 3.605551 7.211103
#judy  3.605551 0.000000 3.605551
#jenny 7.211103 3.605551 0.000000