计算多列数据帧r的平均欧氏距离

时间:2018-05-23 12:20:45

标签: r dataframe vector euclidean-distance

我有一个如下所示的数据框:

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())

我想将结果存储在名为&#34;得分&#34;的列中。结果应如下所示:

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我只能找到将一行转换为向量的示例。我也试过了一堆自己的方法,但每次都卡住了。这可能是由于缺乏基础R知识。请帮我解决这个问题。我非常感谢你的帮助!

3 个答案:

答案 0 :(得分:2)

尝试这个简单的解决方案。

步骤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

答案 1 :(得分:0)

@JuanAntonioRoldánDíaz发布了正确答案。

df$score <- apply(df[,2:4], 1, function(x) mean(dist(x))) 

答案 2 :(得分:-1)

我不知道这是否会对你有所帮助:

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 +