R-将向量中的值与单个值进行比较(使用apply族)
我有这个数据库(简称) 我的第一个课程中心是:R-将向量中的值与单个值进行比较(使用apply族),r,R,我有这个数据库(简称) 我的第一个课程中心是: > K1 = 4 CenterOfClasses = testDB[sample(1:nrow(testDB), K1, replace=FALSE), ] CenterOfClasses Civilite Age Enfants Region Recence Frequence_visite_site Mailing_Clic Mlle 45 Non Nord 11 6
> K1 = 4
CenterOfClasses = testDB[sample(1:nrow(testDB), K1, replace=FALSE), ]
CenterOfClasses
Civilite Age Enfants Region Recence Frequence_visite_site Mailing_Clic
Mlle 45 Non Nord 11 6 Non
Mr 37 Non Nord 10 7 Non
Mr 56 Non Nord 14 6 Non
Mlle 43 Non Nord 11 8 Non
在计算向量(testDB的单独记录)和元素(类中心的每个元素)之间的差异时,我遇到了一个问题
以下是我的变量:
DVar = list()
VectClasses ##Vector
VectIndVar ##Vector
VectClasses1 = CenterOfClasses[1,] etc
VectIndVar = testBD
这就是我正在尝试使用的函数
mapply(function(x, y){
sum(identical(x,y))},
VectClasses[x,y],VectIndVar[,y])
这就是我想做的:
DVar[[nClass]][nVar]=sum(VectClasses[nClass,nVar] == VectIndVar[,nVar])
(将我数据库的第一列与第一个变量分配给第一个类的值以及每个变量和类的值进行比较)
我改变了我的方法,现在将数据库的每个记录与VectClass的每一行进行比较
我试过这个:
xall = data.frame()
for (k in 1:nrow(VectClasses))
{
for (i in 1:nrow(VectIndVar))
{
xall[i,k] = sum(VectClasses[k,] == VectIndVar[i,])
}
}
它返回:
> head(xall)
V1 V2 V3 V4
1 3 3 2 2
2 2 2 1 1
3 3 4 3 3
4 3 4 3 3
5 4 4 3 3
6 3 2 3 3
现在,我尝试剪切的循环,并用apply族函数替换它
xball = sapply(xball, function(i,k){sum(VectClasses[k,] == VectIndVar[i,])})
但这并不能满足所有人的需求
我希望尽可能避免在类的数量或变量的数量上循环
你能帮我吗?
ivar你能让你的例子重现吗?你能输出你的数据吗?我认为vectclass[x,y],VectIndVar[,y])
似乎不正确。无论如何,举个例子会有帮助
ivar <- VectIndVar[rep(1:nrow(VectIndVar), nrow(VectClasses)), ]
vclass <- VectClasses[rep(1:nrow(VectClasses), each = nrow(ivar) / K1), ]
xball <- matrix(rowSums(vclass == ivar), ncol = nrow(VectClasses))
ivar <- VectIndVar[rep(1:nrow(VectIndVar), nrow(VectClasses)), ]
vclass <- VectClasses[rep(1:nrow(VectClasses), each = nrow(ivar) / K1), ]
xball <- matrix(rowSums(vclass == ivar), ncol = nrow(VectClasses))