Конвертировать файл rqda в файл sql
Я использую RQDA, который является пакетом в rstudio, для кодирования текста вручную. Последний rqda-файл представляет собой базу данных sql. Я закодировал утверждения в текстах, использовал разные коды и включил их в категории кодов (например: кодовая категория "actor_party", а затем соответствующие коды "социалистический", "либеральный", "консервативный" и т. Д.). Я закончил кодирование и хочу провести анализ социальной сети с ним. Для этого я хочу создать базу данных sql, чтобы каждая категория кода получала свой собственный столбец с конкретными кодами в каждой строке. Каждый код может быть идентифицирован следующими атрибутами: catid (= номер категории кода), fid (идентификационный номер файла) и selfirst (начало каждого кода). Таким образом, для каждого закодированного оператора выбирается конкретный код, fid и selfirst, чтобы sqlite мог идентифицировать каждую кодировку как уникальную (кроме того, как показано ниже в сценарии R, для каждого действительного кодирования необходимо указать status=1). избранный тоже).
Я использую rstudio в версии 0.99.879, rqda в версии 0.2-7 и rsqlite 1.0.0.
Итак, используется следующий код R:
library(RSQLite) # load Package RSQLite
setwd("C:/...")
system("ls *.rqda", show=TRUE)
sqlite <- dbDriver("SQLite")
#specifing the file
qdadb <- dbConnect(sqlite,"My_data.rqda")
dbListTables(qdadb)
dbListFields(qdadb, "coding") # that's where the codings are stored
catid <- dbGetQuery(qdadb, "select distinct(catid) from treecode where status = 1 ORDER BY catid")
i <- 1
table <- dbGetQuery(qdadb, "select fid, selfirst from coding where status = 1 GROUP BY fid, selfirst")
while(i <= max(catid)) {
ids <- dbGetQuery(qdadb, paste("select cid from treecode where (catid = ",i," and status = 1)", sep=""));
t <- dbGetQuery(qdadb, paste("select cid, fid, selfirst from coding where (cid in (", paste(as.character(ids$cid), sep="' '", collapse=","), ") and status = 1)", sep=""));
table <- merge(table, t, by = c("fid","selfirst"), all.x = T);
i <- i + 1;
}
# warnings are created because of the same columns which are duplicated by the merging
colnames(table) <- c("fid", "selfirst", dbGetQuery(qdadb, "select name from codecat where status = 1")[,1]) #each code has attributed a unique f(ile)id and selfirst (it's the unique starting point of each coding)
# see below for an example of such a created table
library(car) # Companion to Applied Regression package
# years - catid = 1
table$A00_time_frame <- recode(table$A00_time_frame, '1 = 2010; 2 = 2011; 3 = 2012; 4 = 2013; 5 = 2014; 6 = 2015')
# Sources - catid = 2
ids <- dbGetQuery(qdadb, "select cid from treecode where (catid = 2 and status = 1)")[,1]
values <- dbGetQuery(qdadb, paste("select name from freecode where (id in(", paste(ids, collapse = ","), ") and status = 1)"))[,1]
table$B00_source <- recode(table$B00_source, paste0("'", paste(ids,"'='", values, collapse = "';'", sep=""),"'", sep=""))
# Claimant type - catid = 3
ids <- dbGetQuery(qdadb, "select cid from treecode where (catid = 3 and status = 1)")[,1]
values <- dbGetQuery(qdadb, paste("select name from freecode where (id in(", paste(ids, collapse = ","), ") and status = 1)"))[,1]
table$C00_claimant_type <- recode(table$C00_claimant_type, paste0("'",
paste(ids,"'='", values, collapse = "';'", sep=""),"'", sep=""))
and so until "catid = 20"
Это работает и выглядит так: example_table [и эта таблица продолжается до строки 844 - только фид поднимается]
Несмотря на то, что это работает, и созданная таблица соответствует общему количеству кодировок, некоторые ошибки случаются. Некоторые коды не связаны с правильным оператором (даже если они связаны с правильной категорией кода, но не с правильным и закодированным оператором)
Я все еще новичок в R(studio) и не могу объяснить, что пошло не так.
Кто-нибудь знает, в чем может быть проблема или ошибка здесь и как это можно исправить?
По запросу я рад поделиться своим файлом:)
Любой совет или помощь очень приветствуются!
Изменить: Вот ссылка на подмножество моих данных, которые вы можете воспроизвести (файл в формате rqda, потому что я думаю, что преобразование его может быть самой проблемой).
Более того, и дать вам два примера, где можно посмотреть.
Создав "таблицу" в R, можно определить следующую строку
1. - fid 95, selfirst 4553, затем кодирование "Welt", а затем "E02_European_Commission" + "G10_Cameroon" позже
Однако, если вы проверите кодировку в исходном rqda-файле, код "Камерун" находится не в этом файле, а в fid 70, selfirst 5082 и в "Welt" в году "2010".
- Fid 90, selfirst 959 и год "2011" показывают коды "CDU", а в последнем ряду "специальный заявитель" отображается имя "Martin Schulz".
Однако, если вы проверяете кодировку в исходном rqda-файле, в подмножестве нет кода, прикрепленного к коду 'Martin Schulz'.
- Fid 90, selfirst 959 и год "2011" показывают коды "CDU", а в последнем ряду "специальный заявитель" отображается имя "Martin Schulz".
Я надеюсь, что эти два примера иллюстрируют проблему и дают вам представление о том, в чем проблема.
Извините, что я не предоставил это в первую очередь!
1 ответ
Возможно, сначала упростите код, чтобы лучше понять, что может быть не так? Лично я бы больше полагался на SQL, а не на R для сопоставления всей информации:
t <- dbGetQuery(qdadb, "SELECT codecat.name, coding.cid, coding.fid, coding.selfirst
FROM treecode, coding, codecat
WHERE treecode.cid = coding.cid
AND treecode.catid = codecat.catid
AND treecode.status = 1
AND coding.status = 1")
head(reshape(t, idvar = c("fid", "selfirst"), timevar = "name", direction = "wide"))
Не уверен, что это то, что вы ищете, или это работает лучше. Но это кажется более простым кодом для оценки.