cách lấy tên và nhãn biến từ sas7bdat vào data.frame
Tôi đang đọc một tập hợp dữ liệu sas vào r. Tôi tự hỏi liệu có mã nào mà tôi sử dụng để lấy tên biến và nhãn biến vào data.frame hay sth giống như một cuốn codebook không?
Tôi đã sử dụng gói thiên đường để đọc dữ liệu
haven:read_sas
Tôi tự hỏi liệu nó có lưu các nhãn dữ liệu ở một nơi hay không. nếu vậy, tôi có thể lấy nó ra không?
Dữ liệu trong r trông như thế này:
Tôi muốn tạo một data.frame giống như sau:
mã lỗi:
<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(...)
Có vẻ như lỗi do một dữ liệu giống như sau:
dữ liệu mẫu có thể được xây dựng bởi
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")
Trả lời
Bạn có thể thấy câu hỏi này hữu ích: Trích xuất thuộc tính nhãn từ các cột nhỏ "được gắn nhãn" từ một mục nhập ẩn náu từ Stata
Đây là một ví dụ:
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
Chỉnh sửa: Dựa trên các nhận xét, đây là ví dụ nếu bạn muốn lấy nhãn cho nhiều data.frame trong danh sách mà một số data.frame không có nhãn.
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