Сумма в dplyr, дающая (что я ожидаю) count [duplicate]

Ошибки округления с плавающей запятой. 0,1 не могут быть представлены точно в базе-2, как в базе-10, из-за недостающего простого коэффициента 5. Так же, как 1/3 принимает бесконечное число цифр для представления в десятичной форме, но составляет «0,1» в базе-3, 0.1 принимает бесконечное число цифр в базе-2, где оно не находится в базе-10. И компьютеры не имеют бесконечного объема памяти.

4
задан Matt L. 11 February 2016 в 21:11
поделиться

1 ответ

Преобразования, указанные вами в summarize, выполняются в том порядке, в котором они отображаются, что означает, что если вы изменяете значения переменных, то эти новые значения появляются для последующих столбцов (это отличается от базовой функции tranform()). Когда вы выполняете

df %>% group_by(time) %>%
  summarise(glucose=mean(glucose, na.rm=TRUE),
        glucose.sd=sd(glucose, na.rm=TRUE),
        n=sum(!is.na(glucose)))

, часть glucose=mean(glucose, na.rm=TRUE) изменила значение переменной glucose таким образом, что при вычислении части glucose.sd=sd(glucose, na.rm=TRUE) в sd() не отображаются исходные значения глюкозы , он видит новое значение, которое является средним значением исходных значений. Если вы переупорядочиваете столбцы, это будет работать.

df %>% group_by(time) %>%
  summarise(glucose.sd=sd(glucose, na.rm=TRUE),
        n=sum(!is.na(glucose)), 
        glucose=mean(glucose, na.rm=TRUE))

Если вам интересно, почему это поведение по умолчанию, это связано с тем, что часто бывает полезно создать столбец, а затем использовать значение столбца позже в преобразованиях. Например, с mutate()

df %>% group_by(time) %>%
  mutate(glucose_sq = glucose^2,
        glucose_sq_plus2 = glucose_sq+2)
3
ответ дан MrFlick 27 August 2018 в 06:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: