использование функции Говдиса в R - PullRequest
0 голосов
/ 31 мая 2018

Я хочу использовать функцию gowdis, чтобы найти расстояние между двумя выборками данных, но эта функция выдает значение NAN.Мои данные похожи на следующие.

df1> 
  A      B      C      D      E      F      G      H      I      J 
 tcp   http    198     4      4      0     246     1      0      0
df2>
    A    B      C   D  E F  G  H I J
    1 tcp http 145  1  1 0 255 1 0 0
    2 tcp http 207 11 11 0 255 1 0 0
    3 tcp http 296 10 10 0 255 1 0 0
    4 tcp http 212  9  9 0 255 1 0 0

И код, который я написал, выглядит следующим образом

W<-nrow(df1)+1
E<-nrow(df1)+nrow(df2)
mixusefull2<- rbind(df1,df2)
dist_mixusefull2<- as.matrix(FD::gowdis(mixusefull2))
idxs_mixusefull2 <- KernelKnn::distMat.knn.index.dist(dist_mixusefull2, 
TEST_indices = c(W:E), k = 1, threads = 1, minimize = TRUE)

Спасибо за вашу помощь

1 Ответ

0 голосов
/ 31 мая 2018

пример данных

df1 = as.data.frame(matrix(c('tcp','http', 198, 4, 4, 0, 246, 1, 0, 0), 

                    nrow = 1, ncol = 10), stringsAsFactors = TRUE)

colnames(df1) = toupper(letters[1:10])

df1



df2 = as.data.frame(matrix(c(rep('tcp', 4), rep('http', 4), c(145, 207, 296, 212), 

                           c(1,11,10,9), c(1,11,10,9), rep(0, 4), rep(255, 4), 

                           rep(1, 4), rep(0, 4), rep(0, 4)), nrow = 4, ncol = 10, 

                           byrow = FALSE), stringsAsFactors = TRUE)

colnames(df2) = toupper(letters[1:10])

df2

W<-nrow(df1)+1

E<-nrow(df1)+nrow(df2)

mixusefull2<- rbind(df1,df2)

str(mixusefull2)

Я преобразовал столбцы с 3 по 10 в числовые.Я не знаю вариант использования ваших данных, но вы должны знать, что функция FD :: gowdis принимает числовой , упорядоченный или фактор переменные (вы можете посмотреть используя ? FD :: gowdis ).Таким образом, вы, вероятно, должны соответствующим образом изменить тип столбцов.

for (col in 3:10) {

  mixusefull2[, col] = as.numeric(mixusefull2[, col])
}

str(mixusefull2)


dist_mixusefull2<- as.matrix(FD::gowdis(mixusefull2))

dist_mixusefull2

idxs_mixusefull2 <- KernelKnn::distMat.knn.index.dist(dist_mixusefull2, 

                        TEST_indices = c(W:E), k = 1, threads = 1, minimize = TRUE)

idxs_mixusefull2

$test_knn_idx
     [,1]
[1,]    1
[2,]    1
[3,]    1
[4,]    1

$test_knn_dist
      [,1]
[1,] 0.175
[2,] 0.300
[3,] 0.300
[4,] 0.375

Я не получаю никаких NA.Является ли вывод тем, что вы на самом деле ожидаете?

...