Я довольно новичок в R. Это кажется простым вопросом, но я просто не знаю, как лучше к нему подойти. Я проверил похожие вопросы, но не нашел ответа, который искал.
У меня есть список фреймов данных (на самом деле tibbles), которые я хочу запустить через функцию convert () из пакета hablar для преобразования все типы данных для каждой переменной в кадрах данных. Затем я хочу перезаписать исходные кадры данных. Вот упрощенный пример фрейма данных (обратите внимание, что все переменные в настоящее время являются факторами). Для простоты я сделал adm2 и adm3 такими же, как adm1, но в моих реальных данных они разные.
adm1 <- data.frame(admV1 = as.factor(c("male", "female", "male", "female")),
admV2 = as.factor(c("12.2", "13.0", "14.0", "15.1")),
admV3 = as.factor(c("free text", "more free text", "even more free text", "free text again")),
admV4 = as.factor(c("2019-01-01T12:00:00", "2019-01-01T12:00:00", "2019-01-01T12:00:00", "2019-01-01T12:00:00")))
adm1 <- as_tibble(adm1)
adm2 <- adm1
adm3 <- adm1
dis1 <- data.frame(disV1 = as.factor(c("yes", "no", "yes", "no")),
disV2 = as.factor(c("12.2", "13.0", "14.0", "15.1")),
disV3 = as.factor(c("free text", "more free text", "even more free text", "free text again")),
disV4 = as.factor(c("2019-01-01+T12:00:00", "2019-01-01+T12:00:00", "2019-01-01+T12:00:00", "2019-01-01+T12:00:00")))
dis1 <- as_tibble(dis1)
dis2 <- dis1
dis3 <- dis1
У меня есть два «типа» фреймов данных: входные и выходные данные. Я определил переменные, которые необходимо преобразовать в каждый тип данных (примечание. В моем реальном примере каждый представляет собой символьный вектор, содержащий более одного имени переменной):
# Define data types
adm_chr<- admV3
adm_num<- admV2
adm_fct<- admV1
adm_dte<- admV4
dis_chr<- disV3
dis_num<- disV2
dis_fct<- disV1
dis_dte<- disV4
Затем я создал список наборов данных :
# Define datasets
adm_dfs<- list(adm1, adm2, adm2)
dis_dfs<- list(dis1, dis2, dis3)
Это то, что мне удалось до сих пор:
# Write function
convertDataTypes<- function(dfs, type = c("adm", "dis")){
outputs1<- dfs %>% lapply(convert(chr(paste0(type, "_chr")),
num(paste0(type, "_num")),
fct(paste0(type, "_fct"))))
outputs2<- dfs %>% mutate_at(vars(paste0(type, "_dte")),
ymd_hms, tz = "GMT")
}
# Run function
convertDataTypes(adm_dfs, "adm")
Я думаю, что мне нужно затем использовать lapply over output1 и output2 для назначения переменных, но, вероятно, есть гораздо лучший способ приблизиться к этому. Буду очень признателен за ваш вклад.