GOOGLE ADS

вторник, 10 мая 2022 г.

Функция проверки типа данных для нескольких фреймов данных R

Я хотел бы создать функцию, в которой аргументом ( input ) будет неизвестное количество кадров данных (может варьироваться), а выводом будет кадр данных с типом данных для каждого столбца кадров данных из ввода.

Пример: у меня есть 2 кадра данных ниже (количество кадров данных может варьироваться, поэтому я не уверен, как передать его в качестве аргумента функции).


# Dataframe 1
kpi_id <- c("SL", "OOS")
kpi_val <- c (1,2)
df1 <- data.frame(kpi_id, kpi_val)
> sapply(df1, class)
kpi_id kpi_val
"character" "numeric"
# Dataframe 2
kpi_id <- c("SL", "OOS")
kpi_val <- c ("3", "4")
df2 <- data.frame(kpi_id, kpi_val)
> sapply(df2, class)
kpi_id kpi_val
"character" "character"

Я могу получить результат простым способом, как показано ниже:

df_types1 <- as.data.frame(sapply(df1, class))
colnames(df_types)[1] <- deparse(substitute(df1))
df_types2 <- as.data.frame(sapply(df2, class))
colnames(df_types)[1] <- deparse(substitute(df2))
df_types3 <- bind_cols(df_types1, df_types2)
> df_types3
df1 df2
kpi_id character character
kpi_val numeric character

Как я могу создать функцию, в которой начальное количество кадров данных неизвестно, чтобы получить тот же результат?


Решение проблемы

Использование rapply.

rapply(list(df1=df1, df2=df2), class, how='l') |>
do.call(what='cbind')
# df1 df2
# kpi_id "character" "character"
# kpi_val "numeric" "character"

Если вы получаете странный вывод из-за нескольких классов,

df1$date <- df2$date <- as.POSIXct(Sys.Date())
rapply(list(df1=df1, df2=df2), class, how='l') |>
do.call(what='cbind')
# df1 df2
# kpi_id "character" "character"
# kpi_val "numeric" "character"
# date character,2 character,2

вы можете использовать data.class, который возвращает только первый:

rapply(list(df1=df1, df2=df2), data.class, how='l') |>
do.call(what='cbind')
# df1 df2
# kpi_id "character" "character"
# kpi_val "numeric" "character"
# date "POSIXct" "POSIXct"

Комментариев нет:

Отправить комментарий

Laravel Datatable addColumn returns ID of one record only

Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...