如何批量替换R中KNN近邻索引矩阵的行号为样本ID?
在R中批量将KNN最近邻行号替换为样本ID
你已经通过knn.index.dist()得到了包含最近邻行号的数据框,结构如下:
| ID | N1 | N2 | N3 | N4 | N5 |
|---|---|---|---|---|---|
| A | 12 | 30 | 24 | 1 | 5 |
| B | 27 | 35 | 52 | 13 | 43 |
| C | 28 | 53 | 48 | 18 | 6 |
要批量把这些行号换成训练集对应的样本ID,不用逐行操作,直接用R的向量索引特性就能搞定:
假设你的索引数据框名为knn_index_df,训练数据集名为train_data,且train_data中有一列(比如列名是ID)对应每一行的样本ID,执行以下代码:
# 提取所有需要替换的最近邻列(排除第一列的样本ID) nn_columns <- knn_index_df[, -1] # 批量将行号映射为训练集的样本ID,再赋值回原数据框 knn_index_df[, -1] <- train_data$ID[nn_columns]
原理说明
R中向量支持用矩阵/数据框作为索引,train_data$ID[nn_columns]会自动把nn_columns里的每个行号,对应取到train_data$ID中该行的样本ID,生成和nn_columns结构完全一致的结果,直接替换原数据框的列即可,全程不需要循环,处理80多行毫无压力。
内容的提问来源于stack exchange,提问作者Curdz Coder
相关产品推荐
相关产品推荐

