cara mendapatkan nama variabel dan label dari sas7bdat menjadi data.frame

Dec 16 2020

Saya membaca satu set data sas menjadi r. Saya bertanya-tanya apakah ada kode yang saya gunakan untuk mendapatkan nama variabel dan label variabel menjadi data.frame, atau sth seperti buku kode?

Saya menggunakan paket surga untuk membaca data

haven:read_sas

Saya bertanya-tanya apakah itu menyimpan label data di suatu tempat. jika demikian, apakah saya dapat mengeluarkannya?

Data di r terlihat seperti ini:

Saya ingin membangun data.frame yang terlihat seperti ini:

kode kesalahan:

<error/purrr_error_bad_element_vector>
Result 6 must be a single string, not NULL of length 0
Backtrace:
     x
  1. +-base::debug(list_of_labels <- lapply(datasets, label_lookup_map))
  2. +-base::lapply(datasets, label_lookup_map)
  3. | \-global::FUN(X[[i]], ...)
  4. |   \-tibble::tibble(col_name = df %>% names(), labels = df %>% map_chr(attr_getter("label")))
  5. |     \-tibble:::tibble_quos(xs[!is_null], .rows, .name_repair)
  6. |       \-rlang::eval_tidy(xs[[j]], mask)
  7. +-df %>% map_chr(attr_getter("label"))
  8. | +-base::withVisible(eval(quote(`_fseq`(`_lhs`)), env, env))
  9. | \-base::eval(quote(`_fseq`(`_lhs`)), env, env)
 10. |   \-base::eval(quote(`_fseq`(`_lhs`)), env, env)
 11. |     \-`_fseq`(`_lhs`)
 12. |       \-magrittr::freduce(value, `_function_list`)
 13. |         +-base::withVisible(function_list[[k]](value))
 14. |         \-function_list[[k]](value)
 15. |           \-purrr::map_chr(., attr_getter("label"))
 16. \-purrr:::stop_bad_element_vector(...)
 17.   \-purrr:::stop_bad_vector(...)
 18.     \-purrr:::stop_bad_type(...)

Sepertinya kesalahan tersebut disebabkan oleh data yang terlihat seperti ini:

data sampel dapat dibuat dengan

df<- structure(list(VISITNUM = c(4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 
4, 4, 4, 4, 4, 14, 14, 14, 14), EXDOSE = c(36, 109, 182, 182, 
182, 182, 182, 55, 36, 55, 36, 55, 109, 182, 109, 182, 2600, 
2600, 2600, 2600), EXDOSU = c("mg", "mg", "mg", "mg", "mg", "mg", 
"mg", "mg", "mg", "mg", "mg", "mg", "mg", "mg", "mg", "mg", "mg", 
"mg", "mg", "mg")), label = "EX                              ", row.names = c(NA, 
20L), class = "data.frame")

Jawaban

4 vikjam Dec 16 2020 at 10:56

Anda mungkin menemukan pertanyaan ini bermanfaat: Ekstrak atribut label dari kolom tibble "berlabel" dari impor surga dari Stata

Berikut contohnya:

library(haven)
library(tidyverse)

airline <- read_sas("http://www.principlesofeconometrics.com/sas/airline.sas7bdat")

label_lookup_map <- tibble(
  col_name = airline %>% names(),
  labels = airline %>% map_chr(attr_getter("label"))
)

print(label_lookup_map)
# # A tibble: 6 x 2
# col_name labels         
# <chr>    <chr>          
# 1 YEAR   year           
# 2 Y      level of output
# 3 W      wage rate      
# 4 R      interest rate  
# 5 L      labor input    
# 6 K      capital input

Edit: Berdasarkan komentar, berikut adalah contoh jika Anda ingin mendapatkan label untuk beberapa data.frames dalam daftar di mana beberapa data.frames tidak memiliki label.

library(haven)
library(tidyverse)

airline <- read_sas("http://www.principlesofeconometrics.com/sas/airline.sas7bdat")
cola <- read_sas("http://www.principlesofeconometrics.com/sas/cola.sas7bdat")
data(iris)

list_of_tbl <- list(airline, cola, iris)

get_labels <- attr_getter("label")

has_labels <- function(df) {
    !all(sapply(lapply(df, get_labels), is.null))
}

label_lookup_map <- function(df) {

    df_labels <- NA
    if (has_labels(df)) {
        df_labels <- df %>% map_chr(get_labels)
    }
 
  tibble(
    col_name = df %>% names,
    labels = df_labels
  )
}

list_of_labels <- lapply(list_of_tbl, label_lookup_map)

print(list_of_labels)
# [[1]]
# # A tibble: 6 x 2
#   col_name labels         
#   <chr>    <chr>          
# 1 YEAR     year           
# 2 Y        level of output
# 3 W        wage rate      
# 4 R        interest rate  
# 5 L        labor input    
# 6 K        capital input  

# [[2]]
# # A tibble: 5 x 2
#   col_name labels                                   
#   <chr>    <chr>                                    
# 1 ID       customer id                              
# 2 CHOICE   = 1 if brand chosen                      
# 3 PRICE    price of 2 liter soda                    
# 4 FEATURE  = 1 featured item at the time of purchase
# 5 DISPLAY  = 1 if displayed at time of purchase     

# [[3]]
# # A tibble: 5 x 2
#   col_name     labels
#   <chr>        <lgl> 
# 1 Sepal.Length NA    
# 2 Sepal.Width  NA    
# 3 Petal.Length NA    
# 4 Petal.Width  NA    
# 5 Species      NA