为什么我的 mutate 函数的输出应该是 29,但却是 26? [重复]

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

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"))

感谢一百万!

r tidyverse
1个回答
0
投票

当您执行

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)
  )
© www.soinside.com 2019 - 2024. All rights reserved.