1

我正在处理最初作为.sas7bdat文件提供的几个数据集。

最初,我使用包加载了所有文件,sas7bdat但现在我确信haven包可以做得更好更快。

但是,与使用时相比,新加载的数据haven::read_(sas)似乎表现不同from :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"

reprex 包(v0.2.1)于 2019-01-31 创建

从上面的示例中可以看出,attr()当使用 加载数据时也会打印出来haven。例如,当我想要将结果打印在rmarkdown.

我的问题是:如何避免在加载数据时使用pull()表单时打印属性?dplyrhaven

4

1 回答 1

3

首先让我们重现类似的数据:

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
于 2019-01-31T12:52:10.037 回答