Использование pull() из dplyr после чтения данных с помощью haven::read_sas сохраняет атрибуты. Как избежать?
Я работаю с несколькими наборами данных, которые изначально .sas7bdat
файл.
Первоначально я загрузил все файлы, используя sas7bdat
пакет, но теперь я убежден, что haven
Пакет может сделать лучше и быстрее.
Тем не менее, недавно загруженные данные с haven::read_(sas)
похоже, ведет себя по-другому по сравнению с sas7bdat::read.sas7bdat()
когда используешь pull()
от dplyr
:
library("haven")
library("dplyr")
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
library("sas7bdat")
data.sas7 <- sas7bdat::read.sas7bdat(system.file("examples", "iris.sas7bdat", package = "haven"))
data.sas7 %>% summarise(mean = mean(Petal_Length)) %>% pull
#> [1] 3.758
data.haven <- haven::read_sas(system.file("examples", "iris.sas7bdat", package = "haven"))
data.haven %>% summarise(mean = mean(Petal_Length)) %>% pull
#> [1] 3.758
#> attr(,"format.sas")
#> [1] "BEST"
Создано 2019-01-31 пакетом представлением (v0.2.1)
Как видно из приведенного выше примера attr()
также печатаются при загрузке данных с использованием haven
, Это непрактично, например, когда я хочу напечатать результат в rmarkdown
,
Мой вопрос: как я могу избежать печати атрибута при использовании pull()
форма dplyr
когда данные загружены haven
?
1 ответ
Сначала давайте воспроизведем похожие данные:
iris2 <- iris
attr(iris2$Petal.Length,"format.sas") <- "BEST"
iris2 %>%
summarise(mean = mean(Petal.Length)) %>%
pull
# [1] 3.758
# attr(,"format.sas")
# [1] "BEST"
Затем посмотрите первую строчку, которую я здесь использую, она удаляет атрибут "format.sas"
всех столбцов:
iris2 %>%
mutate_all(`attr<-`,"format.sas", NULL) %>%
summarise(mean = mean(Petal.Length)) %>%
pull
# [1] 3.758
Если вы хотите удалить все атрибуты:
iris2 %>%
mutate_all(`attributes<-`, NULL) %>%
summarise(mean = mean(Petal.Length)) %>%
pull
# [1] 3.758