我正在实施k-Means。这是我的主要数据结构:
dt1 是带有 {Filename,featureVector,GroupItBelongsTo} 的 Data.table
dt1<- data.table(Filename=files[1:limit],Vector=list(),G=-1)
setkey(dt1,Filename)
featureVector 是一个列表。它有与出现相关的单词,我使用这一行将出现添加到每个单词:
featureVector[[item]] <- emaildt[email==item]$N
当我打电话时,我的控制台的一个典型摘录dt1
是。
Filename Vector G
1: 000057219a473629b53d33cfedef590f.txt 1,1,1,1,1,1, 3
2: 00007afb5a5e467a39e517ae87e7fad5.txt 0,0,0,0,0,0, 3
3: 000946d248fdb1d5d05c59a91b00e8f2.txt 0,0,0,0,0,0, 3
4: 000bea8dc6f716a2cac6f25bdbe09073.txt 0,0,0,0,0,0, 3
我现在想为每个组号计算新的质心。这意味着我想将位置1处的所有向量位置、[2] 等相加。直到最后,然后 - 将它们全部平均。
示例:v1=[1,1,1], v2=[2,2,2],我希望质心为 = c1=[1,5;1,5;1,5]
我尝试这样做: sapply(dt1[tt]$Vector,mean) (也尝试使用“sum”)并且它按行(在每个向量内)求和和“均值”,而不是按列(每个第 n 个分量)就像我想做的那样。
怎么做?
====更新,在评论中回答问题====
> head(dt1)
Filename Vector G
1: 000057219a473629b53d33cfedef590f.txt 1,1,1,1,1,1, 1
2: 00007afb5a5e467a39e517ae87e7fad5.txt 0,0,0,0,0,0, 1
3: 000946d248fdb1d5d05c59a91b00e8f2.txt 0,0,0,0,0,0, 3
4: 000bea8dc6f716a2cac6f25bdbe09073.txt 0,0,0,0,0,0, 4
5: 000fcfac9e0a468a27b5e2ad0f78d842.txt 0,0,0,0,0,0, 1
6: 00166a4964d6c939f8f62280b85e706d.txt 0,0,0,1,0,0, 1
> class(dt1)
[1] "data.table" "data.frame"
>
打字dt1$Vector
给出(我只复制了一个小样本,它有更多的词,但它们看起来都一样):
[[1]]
homosexuality articles church people interest
1 1 1 1 1
thread email send warning worth
1 1 1 1 1
这是 class() 输出
> class(dt1$Vector)
[1] "list"
打字时的截图:
A<-as.matrix(t(as.data.frame(dt1$Vector)))
结果class(dt1$Vector[[1]])
:
[1] "numeric"