'R to Stata: Exporting tibble with value labels

My task is to write a Stata-readable dataframe with variable labels and value labels. It appears that the package haven is the most suitable one to do such an operation (better than readstata13 and foreign).

I begin with creating the tibble:

library(haven)

x1 <- labelled(
  sample(1:5), 
  c(Good = 1, Bad = 5)
)
x1

x2 <- labelled(
  c("M", "F", "F", "F", "M"), 
  c(Male = "M", Female = "F")
)
x2

df <- tibble::data_frame(x1, x2, z = 1:5)
df

Then, I export the tibble

write_dta(df)

When I read it in Stata, the labels replace the real values (in x1, 1 becomes equal to "Good" and 5 becomes equal to "Bad"). How can I read the tibble in Stata, in way such that the values remain from 1 to 5 and "Good" and "Bad" are stored as value labels?



Solution 1:[1]

It's possible but rather fiddly, you will have to attach labels manually using attr1 function as in the example below.

# Attach variable and value labels to a new R data.frame
attr(df, "var.labels") <- c("my var label 1", "my var label 2")
# To create and attach value labels
val1 <- c(apple=10, beans=20)
val2 <- c(kg=1, bag=2)
attr(df, "label.table") <- list(val1, val2)
attr(df, "val.labels") <- c("val1", "val2")
# And finally describe the dataset
attr(df, "datalabel") <- "Collected from MWI 2013"

1The original solution was provided by Melanie Bacou and is available in this gist.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Konrad