comment obtenir le nom de la variable et les étiquettes de sas7bdat dans un data.frame
Je lis un ensemble de données sas dans r. Je me demande s'il existe un code que j'utilise pour obtenir le nom de la variable et l'étiquette de la variable dans un data.frame, ou qc comme un livre de codes?
J'ai utilisé le package Haven pour lire les données
haven:read_sas
Je me demande s'il a enregistré des étiquettes de données à un endroit. si oui, puis-je le sortir?
Les données de r ressemblent à ceci:

Je veux créer un data.frame qui ressemble à ceci:

codes d'erreur:
<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(...)
Itr semble que l'erreur a été causée par une donnée qui ressemble à ceci:

des exemples de données peuvent être créés par
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")
Réponses
Cette question peut vous être utile: extrayez l'attribut labels des colonnes tibble "étiquetées" à partir d'une importation de havre de Stata
Voici un exemple:
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
Modifier: Basé sur les commentaires, voici un exemple si vous vouliez obtenir les étiquettes pour plusieurs data.frames dans une liste où certains des data.frames n'ont pas d'étiquettes.
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