R计算数据帧中两个单元的平均值是错误的

问题描述 投票:0回答:2

我需要计算一个工人的特定岗位和预班次测量的差异,并平均这两个差异。一个区别是9,另一个是-2,但是当我使用“mean”来计算平均值时,R表示9而不是4.5。我究竟做错了什么。我的代码(4和8是post,1和5是pre):

   mean((p2res$feno[p2res$no=="4"&p2res$subject.id==4])-
   (p2res$feno[p2res$no=="1"&p2res$subject.id==4])+
   (p2res$feno[p2res$no=="8"&p2res$subject.id==4])-
   (p2res$feno[p2res$no=="5"&p2res$subject.id==4])) 

    p2res <- structure(list(subject.id = c(4, 4, 4, 4, 4, 4, 4, 4, 6, 
    6, 6, 6, 6, 6, 6, 6), no = c(1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 
    5, 6, 7, 8), feno = c(24, 23, 40, 35, 28, 25, 22, 26, 19, 19, 18, 
    19, 15, 14, 29, 18)), row.names = c(NA, -16L), class = 
    c("data.frame"))

      subject.id  no  feno
               4  1   24
               4  2   23
               4  3   40
               4  4   35
               4  5   28
               4  6   25
               4  7   22
               4  8   26
               6  1   19
               6  2   19
               6  3   18
               6  4   19
               6  5   15
               6  6   14
               6  7   29
               6  8   18

另外,如何为其他测量执行此功能?

r average mean
2个回答
1
投票

这是因为R解释你的代码没有正确格式化输入到mean,给定 mean只能评估数字或逻辑向量。 你在计算平均值之前评估表达式,即。你正在计算9的平均值,结果为9。

此外,35-24返回11,而26-28返回-2。也许你所指的是不同的价值?所以11和-2的平均值是4.5,所以假设你打算把11而不是9。

你能做什么(如果你不想写一个函数)do是定义一个长度为2的变量.x<-c(((p2res$feno[p2res$no=="4"&p2res$subject.id==4])-(p2res$feno[p2res$no=="1"&p2res$subject.id==4])), ((p2res$feno[p2res$no=="8"&p2res$subject.id==4])-(p2res$feno[p2res$no=="5"&p2res$subject.id==4])))

然后,

mean(x)

给4.5


0
投票

通过使用subset提取subject.id 4的数据,您可以生成更易读且更易于使用的内容。

subj4 <- subset(p2res, subject.id==4)
mean(c(subj4$feno[4]-subj4$feno[1], subj4$feno[8]-subj4$feno[5]))

使用attach for subj4允许R在不添加subj4变量名的情况下找到变量。这进一步提高了可读性。

subj4 <- subset(p2res, subject.id==4)
attach(subj4)
mean(c(feno[4]-feno[1], feno[8]-feno[5]))

如果您愿意,可以使用detach(subj4)撤消此操作。

© www.soinside.com 2019 - 2024. All rights reserved.