У меня большой опрос, с которым я работаю. Основные данные опроса хранятся в виде файла CSV. Файлы меток переменных и значений включены как в SAS-формат, так и в SPSS-формат, но хранятся в виде TXT-файлов.
Я видел, что есть несколько способов легко прочитать данные в R, когда они сохранены в собственных форматах SAS / SPSS / STATA (.sas / .sav / .dta). До сих пор все решения, с которыми я сталкивался, используя решения haven
, labelled
, foreign
, предполагают, что данные хранятся в собственном формате соответствующей "другой" программы. Я не могу найти какой-либо совет о том, как добавить метки к данным CSV, используя файлы TXT, хранящиеся в каком-то стандартном формате SAS / SPSS.
Итак, скажем, у меня есть три файла:
data.csv
sas_var_labels.txt
sas_val_labels.txt
data.csv
выглядит примерно так:
AB001; AB002; AC001
-9; -9; -7
-1; -9; -8
-3; -9; 100
-9; -1; 200
-4; -1; 100
sas_var_labels.txt
выглядит так:
AB001 = "A-Section A, category B, question 1"
AB002 = "A-Section A, category B, question 2"
AC001 = "A-Section A, category C, question 1"
И, наконец, sas_val_labels.txt
выглядит так:
; value AB001 -9 = "-9.not applicable"
-8 = "-8.no response"
-7 = "-7.unknown"
-1 = "-1.other duration"
1 = "1.1 year"
2 = "2.1 to 3 years"
3 = "3.4 to 6 years"
4 = "4.More than 6 years"
; value AB002 -9 = "-9.not applicable"
-8 = "-8.no response"
-7 = "-7.unknown"
-1 = "-1.other type"
; value AC001 -9 = "-9.not applicable"
-8 = "-8.no response"
-7 = "-7.unknowns"
-5 = "-5.non-codable"
-1 = "-1.other category"
100 = "100.First division"
200 = "200.Second division"
Мой подход пока:
Для основных данных я просто вызываю:
dat <- read.csv("data.csv", sep=";", stringsAsFactors=FALSE)
Для переменных меток, поскольку количество меток соответствует столбцам в точно данные, я просто читаю в файле TXT таким же образом, а затем назначаю второй столбец для данных, используя var_label()
из пакета labelled
:
#first I read in the variable labels into R as a dataframe
var_labs <- read.csv("sas_var_label.txt", sep="=", stringsAsFactors=FALSE, header=FALSE, strip.white=TRUE)
#next, I assign the second column to the data as it matches exactly (for the moment)
labelled::var_label(dat) <- var_labs$V2
Для меток значений с другой стороны, мой подход усложняется, поскольку файл меток не разделен аккуратно разделителями для всех столбцов и комбинаций строк, как вы можете видеть в приведенном выше примере.
Мой первый вопрос: есть ли простой способ чтения в этом файле, чтобы сохранить структуру TXT-файла метки значения?
Мой более общий вопрос: есть ли лучший подход для обработки этих меток TXT-файлов? Я уверен, что что-то упустил, поэтому любые предложения будут приветствоваться.