A minAB0
coluna deve gerar conforme descrito na mutate()
função.
data <- data %>%
group_by(Sample) %>%
mutate(minAB0 = min(XD_VD+SE, value)) # why is this outputting a different number?
Quando faço isso fora da mutate
função, funciona:
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
Porém , quando faço isso usando o tidyverse , meus números estão todos errados ( minAB0 = 26
for Sample=1
e minAB0 = 32.98313
for Sample=2
). Por que isso está acontecendo? Alguém obtém o resultado certo quando faz isso sozinho e, em caso afirmativo, como?
Aqui estão meus dados:
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"))
Um milhão de agradecimentos!
Quando você faz isso
group_by(Sample)
, o que isso faz émutate()
operar em todas as linhas que correspondem a essa condição.Então quando você pede
min(XD_VD+SE, value)
, você não está pedindo o mínimo de dois valores, você está pedindo o mínimo de 42 valores. Você pode ver que isso está correto porque todo oSample==1
grupo tem avalue
de 26, o valor mais baixo, eSample==2
tem avalue
de32.983
, que é o valor mais baixo deXD_VD+SE
, que é menor que o valor mínimo emvalue
(33).Em vez de agrupar por
Sample
, você não pode fazer isso, ou usarpmin
como sugere um comentarista, se o agrupamento for necessário para outra coisa. Ou você pode atribuir a cada linha seu próprio grupo comrowwise()
.