R Tidyverse spread () функция усечения нескольких десятичных знаков - PullRequest
0 голосов
/ 14 ноября 2018

Я заметил проблему с округлением в spread() (и я предполагаю gather()). Я заново создал проблему с некоторыми фиктивными данными (ниже). Что происходит, так это то, что при использовании spread() с двойными числами более 4 знаков после запятой вывод спреда имеет только 3 знака после запятой.

Если кто-то может пролить свет на это, это было бы очень полезно, так как мне нужно сохранить точность с точностью до четвертого знака после запятой.

# Loading packages
library(tidyverse)

# Creating a dummy data set.
dummy_data <- tibble(
  day_of_week = c("Monday", "Tuesday", "Wednesday", "Thursday", "Friday"),
  person = c("Jack", "Bob", "Bob", "Simon", "Simon"),
  value = c(0.2346, 0.7635, 0.7253, 0.7356, 0.1693)
)

# Spreading the data.
spread_data = dummy_data %>%
  spread(person, value)

Ответы [ 3 ]

0 голосов
/ 14 ноября 2018

проблема с типом данных, и я изменил тип данных:

dummy_data$value<-as.factor(dummy_data$value)
# Spreading the data.
spead_data = dummy_data %>%
  spread(person, value)       

ВЫВОД:

# A tibble: 5 x 4
  day_of_week Bob    Jack   Simon 
  <chr>       <fct>  <fct>  <fct> 
1 Friday      NA     NA     0.1693
2 Monday      NA     0.2346 NA    
3 Thursday    NA     NA     0.7356
4 Tuesday     0.7635 NA     NA    
5 Wednesday   0.7253 NA     NA   

Примечание: будьте осторожны с данными типа фактора при использовании в любом виде

0 голосов
/ 14 ноября 2018

Я заново создал фиктивные переменные в моей среде.

Действительно, когда print(spead_data), я получаю:

    day_of_week    Bob   Jack  Simon
  <chr>        <dbl>  <dbl>  <dbl>
1 Friday      NA     NA      0.169
2 Monday      NA      0.235 NA    
3 Thursday    NA     NA      0.736
4 Tuesday      0.764 NA     NA    
5 Wednesday    0.725 NA     NA   

Однако, если вы обращаетесь к значениям напрямую, например, spead_data$Bob, возвращает:

[1]     NA     NA     NA 0.7635 0.7253

Вот ваши 4 цифры! Они никогда не уходили, только функция печати немного отличается.

Я не рекомендую превращать ваши значения в факторы, как рекомендует @saisaran, после этого вы не сможете их правильно использовать.


Редактировать: если вы используете print.data.frame(spead_data) вместо print(spead_data), вы получите нужный результат:

  day_of_week    Bob   Jack  Simon
1      Friday     NA     NA 0.1693
2      Monday     NA 0.2346     NA
3    Thursday     NA     NA 0.7356
4     Tuesday 0.7635     NA     NA
5   Wednesday 0.7253     NA     NA 

Источник: https://community.rstudio.com/t/why-do-tibbles-and-data-frames-display-decimal-places-a-bit-differently/5722

0 голосов
/ 14 ноября 2018

Это у вас работает?

require(reshape2)
dummy_data %>%
  melt(id.vars=c("person","day_of_week")) %>% 
  dcast(value+day_of_week~person) %>% 
  select(-value)

У вас есть несколько НС, но вот ваш результат:

day_of_week    Bob   Jack  Simon
1      Friday     NA     NA 0.1693
2      Monday     NA 0.2346     NA
3   Wednesday 0.7253     NA     NA
4    Thursday     NA     NA 0.7356
5     Tuesday 0.7635     NA     NA
...