R - 将数据帧转换为矩阵,使用head()时获得不同的结果

时间:2015-05-12 04:01:13

标签: r matrix dataframe

我的数据框大约有78,000行,如下所示:

EmailAddress    Column1 Column2 Column3
abc1@gmail.com     1       0       0
abc2@gmail.com     0       0       0
abc3@gmail.com     1       1       0
abc4@gmail.com     1       1       0

我想使用kcca()函数在其上运行kmeans聚类。 我想将此数据帧转换为矩阵,但我想保留列EmailAddress,以便我可以将输出链接到原始数据。 我按如下方式运行as.matrix()函数,当我运行str()命令时,我似乎得到了不同的结果。

我第一次在整个数据框上运行它,你可以看到我得到第一个元素,它应该是列名为NULL,第二个元素,应该是数据1或0,作为EmailAddresses。

我第二次运行它,我使用head()函数,要求前100,000名,现在我得到了我正在寻找的矩阵。

为什么会这样?

> y <- as.matrix(clicked_data[,1:24])
> str(y)
 chr [1:78748, 1:24] "abc1@gmail.com" "abc2@gmail.com" "abc3@msn.com" ...
 - attr(*, "dimnames")=List of 2
  ..$ : NULL
  ..$ : chr [1:24] "EmailAddress" "Column1" "column2" "Column3" ...

> y <- as.matrix(head(clicked_data[,1:24],100000))
> str(y)
 chr [1:10000, 1:24] "abc1@gmail.com" "abc2@gmail.com" "abc3@msn.com" ...
 - attr(*, "dimnames")=List of 2
  ..$ : chr [1:78748] "1" "2" "3" "4" ...
  ..$ : chr [1:24] "EmailAddress" "Column1" "column2" "Column3" ...

1 个答案:

答案 0 :(得分:0)

在第一种情况下NULL是因为矩阵的行没有命名。另一方面,head()似乎将行名称放在dimnames中。

输出澄清了它。

df <- read.table(head = T, text = "EmailAddress    Column1 Column2 Column3
abc1@gmail.com     1       0       0
abc2@gmail.com     0       0       0
abc3@gmail.com     1       1       0
abc4@gmail.com     1       1       0")

mat <- as.matrix(df)
#         EmailAddress     Column1 Column2 Column3
#[1,] "abc1@gmail.com" "1"     "0"     "0"    
#[2,] "abc2@gmail.com" "0"     "0"     "0"    
#[3,] "abc3@gmail.com" "1"     "1"     "0"    
#[4,] "abc4@gmail.com" "1"     "1"     "0"  
mat1 <- as.matrix(head(df, 2))
#      EmailAddress     Column1 Column2 Column3
#1 "abc1@gmail.com" "1"     "0"     "0"    
#2 "abc2@gmail.com" "0"     "0"     "0"