我在 R 中有一个数据框,其中包含 5 行(记录),每行 3 个属性。现在,给定具有相同 20 个属性的新记录,就其内容(值)而言,找到 10 行中哪一行与该新行最相似的最佳方法是什么?
现有数据
Age Occupation Nationality,
23 Builder German,
29 Worker British,
45 Contractor Vietnamese,
24 Engineer German,
28 Doctor Indian,
新数据
23 Doctor German
预期输出
23 Builder German
我想返回第 1 行,即上面的行,因为两个属性匹配
最佳答案
您可以将 stringdist
中的 stringdist
与 method=jaccard
一起使用。通过使用 Map,我们将 df 的列与列表 newdata 的相应元素进行比较。即 df
中的 Age
列用于将 stringdist
与 23
进行比较,Occupation
与Doctor
等等...应用 stringdist
函数后,我们为每个列表获取长度等于 nrow(df)
的数值元素。使用 Reduce
添加相应的值 (+
),然后我们使用 which.min< 查找
(输出将是逻辑索引)。该索引用于对 最小值
值df
进行子集化。
library(stringdist)
df[which.min(Reduce(`+`,Map(stringdist,df, newdata,
method='jaccard'))),]
# Age Occupation Nationality
#1 23 Builder German
数据
df <- structure(list(Age = c(23, 29, 45, 24, 28), Occupation = c("Builder",
"Worker", "Contractor", "Engineer", "Doctor"), Nationality = c("German",
"British", "Vietnamese", "German", "Indian")), .Names = c("Age",
"Occupation", "Nationality"), row.names = c(NA, -5L), class = "data.frame")
newdata <- list(23,"Doctor","German")
关于r - 在数据框中查找与 R 中最接近的匹配行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27128380/