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

R - converting data frame to matrix, get different results when using head()

我有一个大约有 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 以便我可以 link 输出到原始数据。 我 运行 as.matrix() 函数如下,当我 运行 str() 命令时,我似乎得到了不同的结果。

第一次在整个数据框中输入 运行,如您所见,我得到了第一个元素,它应该是列名为 NULL,第二个元素,它应该是数据 1 或0,作为电子邮件地址。

第二次我 运行 它,我使用 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" ...

第一种情况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"