我需要计算一个工人的特定岗位和预班次测量的差异,并平均这两个差异。一个区别是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解释你的代码没有正确格式化输入到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
通过使用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)
撤消此操作。