【发布时间】:2015-05-18 01:36:30
【问题描述】:
我可以这样做:
data <- read.csv("data.csv")
p1 <- subset(data, player_name == 'Player1')
p2 <- subset(data, player_name == 'Player2')
dist(rbind(p1[,c("gp","points")], p2[,c("gp","chances_for","chances_for_help")]))
我知道我的距离。但是data 里面有超过 1000 行,我想要每一行根据 GP 和 point 最相似的十个记录,但我不太清楚。
类似:
apply(data, 1, function(p) {
dist(rbind(p, data))
})
但显然这是行不通的。这里有快速解决方法吗?
示例数据:
player_name,gp,points
Player 1,82,95
Player 2,80,88
Player 3,81,84
Player 4,82,90
Player 5,82,77
【问题讨论】:
-
我认为对整个集合执行一次
dist,然后从每一行中选择最低的情况比运行distnrow次更合适。 -
有什么简单的例子吗?
-
out <- as.matrix(dist(dat[,c("gp","points")]))然后apply(out, 1, function(x) colnames(out)[order(x)[2:4]] )最接近的 3 场比赛? (最接近的匹配将是同一行,因此从 2 开始索引)。我怀疑这是非常有效的,但是那种逻辑。 -
我知道这给了我什么,但它给了我矩阵中的值。我怎样才能将它应用回原来的
data集合,以便它与玩家姓名相关联? -
apply(out, 1, function(x) order(x)[2:4] )返回最接近匹配的原始dat数据集的行号。