Рассчитать среднее евклидово расстояние для нескольких столбцов - PullRequest
0 голосов
/ 23 мая 2018

У меня есть кадр данных, который выглядит следующим образом:

df <- data.frame(text = c("text1", "text2", "text3"),
             a = c(1,2,3),
             b = c(2,4,6),
             c = c(3,6,9))
df

Для каждой строки я хочу вычислить среднее значение расстояния между значениями в столбцах a, b и c, используя:

mean(dist())

Я хочу сохранить результат в столбце с именем «Score».Результат должен выглядеть следующим образом:

df <- data.frame(text = c("text1", "text2", "text3"),
             a = c(1,2,3),
             b = c(2,4,6),
             c = c(3,6,9),
             score = c(mean(dist(c(1,2,3))),
                       mean(dist(c(2,4,6))),
                       mean(dist(c(3,6,9)))))
df

Поиск Stackoverflow Я мог найти только примеры преобразования одной строки в вектор.Я также попробовал несколько своих подходов, но каждый раз застревал.Вероятно, это связано с отсутствием базовых знаний.Пожалуйста, помогите мне решить эту проблему.Я очень благодарен за вашу помощь!

Ответы [ 3 ]

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

Попробуйте это простое решение.

ШАГ 1: создайте функцию f, используя среднее значение для всего расстояния

f<-function(x)
{
  return(mean(dist(x)))
}

ШАГ 2: примените функцию к каждой строке и вставьте вывод вscore

df$score<-apply(df[,-1],1,f)

Ваш вывод

    df
   text a b c    score
1 text1 1 2 3 1.333333
2 text2 2 4 6 2.666667
3 text3 3 6 9 4.000000
0 голосов
/ 23 мая 2018

@ JuanAntonioRoldánDíaz опубликовал правильный ответ.

df$score <- apply(df[,2:4], 1, function(x) mean(dist(x))) 
0 голосов
/ 23 мая 2018

Не знаю, поможет ли это вам:

df <- data.frame(text = c("text1", "text2", "text3"),
             a = c(1,2,3),
             b = c(2,4,6),
             c = c(3,6,9))
score= c(mean(dist(c(1,2,3))),
      mean(dist(c(2,4,6))),
      mean(dist(c(3,6,9))))
df = cbind(df,score)

Результат

df
text a b c    score
1 text1 1 2 3 1.333333
2 text2 2 4 6 2.666667
3 text3 3 6 9 4.000000

A +

...