You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R语言中为数据框每行计算多列的平均欧氏距离

解决方案:为数据框每行计算多列数值的平均欧氏距离

我懂你这种找不到合适逐行处理方法的困扰!之前看到的单行转向量示例确实没法直接套用到整个数据框上,不过咱们用基础R的apply()函数或者tidyverse的rowwise()就能轻松解决这个需求。

方法1:使用基础R的apply()函数

先定义你的原始数据框:

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

接下来用apply()逐行处理a、b、c列,计算每行的平均欧氏距离并新增score列:

# 选取数值列,按行处理,计算mean(dist())
df$score <- apply(df[, c("a", "b", "c")], MARGIN = 1, function(x) mean(dist(x)))

运行后查看结果,完全符合你的预期:

df
#>     text a b c score
#> 1 text1 1 2 3     1
#> 2 text2 2 4 6     2
#> 3 text3 3 6 9     3

代码解释:

  • df[, c("a", "b", "c")]:只选取需要计算的数值列,排除非数值的text列;
  • MARGIN = 1:指定按行进行处理(MARGIN = 2则是按列);
  • 匿名函数function(x) mean(dist(x)):接收每一行的数值向量x,先通过dist()计算向量内所有元素的欧氏距离矩阵,再取平均值得到最终的score。

方法2:使用tidyverse风格(dplyr)

如果你更习惯tidyverse的语法,可以用rowwise()实现逐行计算:

library(dplyr)

df <- df %>%
  rowwise() %>% # 开启逐行处理模式
  mutate(score = mean(dist(c(a, b, c)))) %>% # 计算每行的平均欧氏距离
  ungroup() # 关闭逐行模式,回归常规数据框操作

这个方法的结果和基础R版本完全一致,适合平时用tidyverse做数据处理的场景。


内容的提问来源于stack exchange,提问作者Adriaan Nering Bögel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:46:39