我有两个带有布尔值和数值的数据框。如果需要,可以将数值放入类别中。
var1 <- c(400,234,199,45,77,19)
var2 <- c(0,0,1,1,0,1)
var3 <- c(1,0,1,0,0,1)
df1 <- data.frame(var1,var2,var3)
var.1 <- c(78,147,670,200,75,17)
var.2 <- c(0,0,0,1,1,1)
var.3 <- c(0,1,1,0,1,1)
df2 <- data.frame(var.1,var.2,var.3)
我想在df1
中找到df2
中最相似的行。
我知道集群分析,我可以单独为一个数据框做,但是一旦我有一个数据帧的集群,我将如何提取并应用相同的集群算法到另一个数据帧,这样两者都可以数据框是否以相同的方式聚类?我还需要与数据框中的行一样多的“集群”,这使我认为集群分析不适用于此任务。
此外,df1
中的每一行必须只与df2
中的一行匹配,以便在流程结束时df1
中的每一行都匹配df2
中的不同行1}}。这很棘手,因为如果在df1
中隔离每一行,df2
中的同一行可能会多次匹配,这是不可取的。
答案 0 :(得分:1)
您不必进行群集,只需搜索最小距离。将第一行df1
和cbind
与df2
一起使用。如果列名相同,这是最简单的
var1 <- c(400,234,199,45,77,19)
var2 <- c(0,0,1,1,0,1)
var3 <- c(1,0,1,0,0,1)
df1 <- data.frame(var.1,var.2,var.3)
var.1 <- c(78,147,670,200,75,17)
var.2 <- c(0,0,0,1,1,1)
var.3 <- c(0,1,1,0,1,1)
df2 <- data.frame(var.1,var.2,var.3)
rbind(df1[1,], df2)
可以使用dist
检查结果。我们只对结果的第一列感兴趣,i。即第一个nrow(df2)
结果。
dist(rbind(df1[1,], df2))[1:nrow(df2)]
评估为
> dist(rbind(df1[1,], df2))[1:nrow(df2)]
[1] 0.000000 69.007246 592.000845 122.004098 3.316625
[6] 61.016391
和which.min
告诉我们,哪些行的距离最小:
> which.min(dist(rbind(df1[1,], df2))[1:nrow(df2)])
[1] 1
因此df2
中的第一行与df1
的第一行的距离最小。您可以将其放入apply
或for
循环中,以便对df1
中的每一行进行计算。
你必须回答这个问题,应该如何计算布尔值和数值混合的距离。对此没有普遍的答案。