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
代表 Sample=1
,minAB0 = 32.98313
代表 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
组的 value
均为 26,即最小值,而 Sample==2
的 value
为 32.983
,这是 XD_VD+SE
的最小值,即小于 value
(33) 中的最小值。
您不能这样做,而不是按
Sample
进行分组,或者按照评论者的建议使用 pmin
,如果分组对于其他事情是必要的。或者您可以使用 rowwise()
为每一行分配自己的组。
data2 <- data %>%
group_by(Sample) %>%
mutate(
minAB0 = pmin(XD_VD + SE, value)
)