R 与字符串兼容的变量特定距离矩阵
我正在做一个项目,我需要将案例分组。我有npi的数据,有npi的地址、电话和姓名等信息。 我的目标是对同一组中最相似的npi进行分组。我想通过首先创建一个距离矩阵,然后确定 用来将病例分组的树。然而,在如何为字符串变量创建距离矩阵方面,我遇到了困难。 我基本上有两个问题: 首先,如何创建一个距离函数来比较数据帧中案例之间的相似性,并创建一个距离矩阵作为输出? 它们在相同变量上共享的值越多,我希望它们越接近,因此距离矩阵上的分数越高/越低 第二,如何使这个距离函数与字符串变量兼容 代码: 问题: 1.这里x和y的定义是什么?这些行与所有其他行或其他行形成对比? 使用此定义的函数,距离不是特定于变量的。如果值出现在同一个变量上,我只希望两个案例“相交” 2.我需要向函数添加什么才能使其特定于变量 此外,该方法似乎不适用于字符串变量 代码: 这个距离矩阵毫无意义 问题在于intersect命令:R 与字符串兼容的变量特定距离矩阵,r,R,我正在做一个项目,我需要将案例分组。我有npi的数据,有npi的地址、电话和姓名等信息。 我的目标是对同一组中最相似的npi进行分组。我想通过首先创建一个距离矩阵,然后确定 用来将病例分组的树。然而,在如何为字符串变量创建距离矩阵方面,我遇到了困难。 我基本上有两个问题: 首先,如何创建一个距离函数来比较数据帧中案例之间的相似性,并创建一个距离矩阵作为输出? 它们在相同变量上共享的值越多,我希望它们越接近,因此距离矩阵上的分数越高/越低 第二,如何使这个距离函数与字符串变量兼容 代码: 问题:
> dfstring[1,]
dier getal mubilair
51 aap een tafel
> dfstring[2,]
dier getal mubilair
52 vis twee stoel
> dfstring[4,]
dier getal mubilair
54 kip drie fouton
> intersect(dfstring[1,], dfstring[2,])
data frame with 0 columns and 0 rows
> intersect(dfstring[1,], dfstring[4,])
dier
54 kip
有没有像intersect这样的函数也可以处理字符串变量
那么,如何使我的初始函数变量特定,以及如何使它与字符串变量兼容
x
和y
,请将“x行”与“y行”进行比较。将您的函数更改为
dist_func <- function(x, y) {
browser()
length(intersect(x,y))/3
}
为了得到你想要的,你不只是在寻找简单的平等吗
dist_func <- function(x, y) sum(x == y)/3
例如,请注意,$getal
中的第一个值是“acht”
,它是系数内部的整数3。您会注意到,这三列的第四个整数值分别为3、2、3(与列“51”和行“54”中的距离度量0.667
)
使用read.table(…,stringsAsFactors=FALSE)
或将距离函数更改为:
dist_func2 <- function(x, y) {
if (is.factor(x)) x <- as.character(x)
if (is.factor(y)) y <- as.character(y)
sum(x == y)/3
}
dist_func2
> dfstring[1,]
dier getal mubilair
51 aap een tafel
> dfstring[2,]
dier getal mubilair
52 vis twee stoel
> dfstring[4,]
dier getal mubilair
54 kip drie fouton
> intersect(dfstring[1,], dfstring[2,])
data frame with 0 columns and 0 rows
> intersect(dfstring[1,], dfstring[4,])
dier
54 kip
dist_func <- function(x, y) {
browser()
length(intersect(x,y))/3
}
Performs *set* union, intersection, ...
dist_func <- function(x, y) sum(x == y)/3
str(df2)
# 'data.frame': 10 obs. of 4 variables:
# $ npi : int 51 52 53 54 55 56 57 58 59 60
# $ dier : Factor w/ 9 levels "aap","beer","kip",..: 1 8 6 3 2 1 7 9 5 4
# $ getal : Factor w/ 8 levels "acht","drie",..: 3 4 4 2 5 6 7 8 1 1
# $ mubilair: Factor w/ 9 levels "bank","bureau",..: 7 6 9 3 3 2 1 4 8 5
dist_func2 <- function(x, y) {
if (is.factor(x)) x <- as.character(x)
if (is.factor(y)) y <- as.character(y)
sum(x == y)/3
}