该minAB0
列应按照函数中的描述输出mutate()
。
data <- data %>%
group_by(Sample) %>%
mutate(minAB0 = min(XD_VD+SE, value)) # why is this outputting a different number?
当我在函数之外执行此操作时mutate
,它会起作用:
min((data$XD_VD[1] + data$SE[1]), data$value[1]) = 29
min((data$XD_VD[2] + data$SE[2]), data$value[2]) = 36.71198
但是,当我使用tidyverse执行此操作时,我的数字都是错误的(minAB0 = 26
forSample=1
和minAB0 = 32.98313
for Sample=2
)。为什么会发生这种情况?有人自己做时会得到正确的输出吗?如果是的话,是如何得到的?
这是我的数据:
data <- structure(list(Sample = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2), XD_VD = c(35.9419827146857,
35.9419827146857, 35.9419827146857, 35.9419827146857, 35.9419827146857,
35.9419827146857, 35.9419827146857, 35.9419827146857, 35.9419827146857,
35.9419827146857, 35.9419827146857, 35.9419827146857, 35.9419827146857,
35.9419827146857, 35.9419827146857, 35.9419827146857, 35.9419827146857,
35.9419827146857, 35.9419827146857, 35.9419827146857, 35.9419827146857,
32.1823275467508, 32.1823275467508, 32.1823275467508, 32.1823275467508,
32.1823275467508, 32.1823275467508, 32.1823275467508, 32.1823275467508,
32.1823275467508, 32.1823275467508), SE = c(0.77, 0.77, 0.77,
0.77, 0.77, 0.77, 0.77, 0.77, 0.77, 0.77, 0.77, 0.77, 0.77, 0.77,
0.77, 0.77, 0.77, 0.77, 0.77, 0.77, 0.77, 0.8008, 0.8008, 0.8008,
0.8008, 0.8008, 0.8008, 0.8008, 0.8008, 0.8008, 0.8008), value = c(29,
49, 44, 50, 37, 40, 50, 56, 65, 93, 87, 49, 46, 57, 39, 44, 26,
30, 45, 44, 98, 70, 59, 70, 77, 55, 50, 33, 58, 71, 68)), row.names = c(NA,
-31L), class = c("tbl_df", "tbl", "data.frame"))
太感谢了!
当您这样做时
group_by(Sample)
,所做的就是mutate()
对匹配该条件的所有行进行操作。因此,当您要求 时
min(XD_VD+SE, value)
,您并不是要求两个值中的最小值,而是要求 42 个值中的最小值。您可以看到这是正确的,因为所有Sample==1
组的 a 均为value
26(最小值),并且Sample==2
a 为的最小值value
,小于(33) 中的最小值。32.983
XD_VD+SE
value
如果分组对于其他事情是必要的
Sample
,则您不能这样做,或者按照评论者的建议使用,而不是按分组。pmin
或者您可以使用 为每一行分配自己的组rowwise()
。