датафреймах?
Ситуация такая, что вычисление рангов и вообще представление чисел меняется, в зависимости оттого создан ли датафрейм в R или загружен из таблицы.
Думаю, что это связано с машинным представлением чисел, но выглядит это довольно неприятно и неконсистентно
r
library(dplyr)
df_ties <- data.frame(value = c(seq(1, 1.9, 0.1), seq(1.5, 1.95, 0.05)),
condition = c(rep('a', each = 10), rep('b', each = 10)))
df_ties %>%
mutate(rank = rank(value)) %>%
filter(value == 1.7)
#> value condition rank
#> 1 1.7 b 12
write.csv(df_ties, 'df.csv', row.names = F)
df_ties_csv <- read.csv('df.csv')
df_ties_csv %>%
mutate(rank = rank(value)) %>%
filter(value == 1.7)
#> value condition rank
#> 1 1.7 a 12.5
#> 2 1.7 b 12.5
Сама столкнулась с этим случайно, при попытке вычислять тест Манна-Уитни по формулам вручную и обратила внимание, что ранги вычисляются по-разному в R и вручную
r df_ties <- data.frame(value = c(seq(1, 1.9, 0.1), seq(1.5, 1.95, 0.05)), condition = c(rep('a', each = 10), rep('b', each = 10))) library(tidyverse) df_ties %>% mutate(rank = rank(value)) %>% filter(near(value, 1.7)) #> value condition rank #> 1 1.7 a 13 #> 2 1.7 b 12 write.csv(df_ties, 'df.csv', row.names = F) df_ties_csv <- read.csv('df.csv') df_ties_csv %>% mutate(rank = rank(value)) %>% filter(near(value, 1.7)) #> value condition rank #> 1 1.7 a 12.5 #> 2 1.7 b 12.5 <sup>Created on 2022-06-17 by the [reprex package](https://reprex.tidyverse.org) (v2.0.1)</sup> так попробуйте, если filter нужен да, тема неоднократно поднималась/обсуждалась, в т.ч. и здесь в чате
ранжирование чисел с плавающей запятой — то еще удовольствие. машинная точность, машинный шаг. загрубление может помочь — сядем в ограниченный набор битов в мантиссе
Обсуждают сегодня