首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算R组()内所有观测值成对差的平均值?

计算R组()内所有观测值成对差的平均值?
EN

Stack Overflow用户
提问于 2020-06-15 13:16:09
回答 1查看 427关注 0票数 1

我有一张桌子,像:

代码语言:javascript
复制
Fish    Group     Position
  1       1         100
  2       1         250
  3       1         500
  4       2          25
  5       2          75
  6       2         625

我有成群的鱼,它们在小溪中的位置。要知道它们平均距离有多近,我需要计算群体内所有观测的距离差的平均值。

对于第一组鱼类,它确实:

代码语言:javascript
复制
1-2 distance = 250 - 100 = 150 
2-3 distance = 500 - 250 = 250 
3-1 distance = 500 - 100 = 400

所以我寻找的平均值是平均值(150+ 250 + 400)

对我来说,最棘手的事情是在潮流哲学中找到一种方法来做到这一点!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-15 13:53:48

如果DF是您的数据,您可以尝试这样做。希望它能有所帮助:

代码语言:javascript
复制
library(dplyr)
DF %>% group_by(Group) %>% mutate(Diff=c(last(Position)-first(Position),diff(Position)))

# A tibble: 6 x 4
# Groups:   Group [2]
   Fish Group Position  Diff
  <int> <int>    <int> <int>
1     1     1      100   400
2     2     1      250   150
3     3     1      500   250
4     4     2       25   600
5     5     2       75    50
6     6     2      625   550

只要以前的解决方案只是一个草图,就尝试这个修改,看看这是否适用于您的原始数据:

代码语言:javascript
复制
#Create list by group
L <- split(DF,DF$Group)
#Create function
compute_d <- function(x)
{
  xv <- as.numeric(x$Position)
  y <- dist(xv)
  return(y)
}
#Apply function
lapply(L,compute_d)

结果:

代码语言:javascript
复制
$`1`
    1   2
2 150    
3 400 250

$`2`
    1   2
2  50    
3 600 550

或者更多的修改(新版本):

代码语言:javascript
复制
#Create list by group
L <- split(DF,DF$Group)
#Create function
compute_d <- function(x)
{
  xv <- as.numeric(x$Position)
  y <- dist(xv)
  avg <- mean(y)
  y1 <- as.data.frame(as.matrix(y))
  y2 <- cbind(x,y1)
  y2$mean <- avg
  return(y2)
}
#Apply function
z <- do.call('rbind',lapply(L,compute_d))
rownames(z)<-NULL

  Fish Group Position   1   2   3     mean
1    1     1      100   0 150 400 266.6667
2    2     1      250 150   0 250 266.6667
3    3     1      500 400 250   0 266.6667
4    4     2       25   0  50 600 400.0000
5    5     2       75  50   0 550 400.0000
6    6     2      625 600 550   0 400.0000
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62389017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档