我的数据框大约有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" ...
答案 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"