Section 2.13 Foreign Formats
Subsection 2.13.1 haven
Perhaps you or your collaborators use other types of statistical software such as SAS), SPSS, and Stata. Files supported by these software packages can be imported into R and exported from R using the
haven package.
As an example, we will first write files for each of these software packages and then read them. The data needs to be in a data frame format and spaces and punctuation in variable names will cause issues. We will use the Toy Story character data frame that we created earlier for this example. Note that we are using the
here package that was described in the introduction to save our files in a directory called data which is a subdirectory of the directory in which the .Rproj file is located.
#install.packages("haven")
library(haven)
## SAS
write_sas(data = mydf, path = here::here("data", "mydf.sas7bdat"))
# read_sas() reads .sas7bdat and .sas7bcat files
sas_mydf <-read_sas(here::here("data", "mydf.sas7bdat"))
sas_mydf
# use read_xpt() to read SAS transport files (version 5 and 8)
## # A tibble: 3 ร 3 ## Name Age Occupation ## <chr> <dbl> <chr> ## 1 Woody 40 Sherriff ## 2 Buzz Lightyear 34 Space Ranger ## 3 Andy NA Toy Owner
We can also write the data frame to SPSS format.
## SPSS
write_sav(data = mydf, path = here::here("data", "mydf.sav"))
# use to read_sav() to read .sav files
sav_mydf <-read_sav(here::here("data", "mydf.sav"))
sav_mydf
# use read_por() to read older .por files
## # A tibble: 3 ร 3 ## Name Age Occupation ## <chr> <dbl> <chr> ## 1 Woody 40 Sherriff ## 2 Buzz Lightyear 34 Space Ranger ## 3 Andy NA Toy Owner
Stata format is also supported.
## Stata
write_dta(data = mydf, path = here::here("data", "mydf.dta"))
# use to read_dta() to read .dta files
dta_mydf <-read_dta(here::here("data", "mydf.dta"))
dta_mydf
## # A tibble: 3 ร 3 ## Name Age Occupation ## <chr> <dbl> <chr> ## 1 Woody 40 Sherriff ## 2 Buzz Lightyear 34 Space Ranger ## 3 Andy NA Toy Owner
When exporting and importing to and from all foreign statistical formats itโs important to realize that the conversion will generally be less than perfect. For simple data frames with numerical data, the conversion should work well. However, when there are a lot of missing data, or different types of data that perhaps a given statistical software package may not recognize, itโs always important to check the output to make sure it contains all of the information that you expected.
