我想創建一個函式,其中引數(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
如何創建一個初始資料幀數量未知的函式以獲得相同的輸出?
uj5u.com熱心網友回復:
這是您可以使用的功能;傳遞一個資料框串列,無論該串列是命名的還是未命名的:
df_types <- function(dfs) {
do.call(
rbind,
lapply(seq_along(dfs), function(d) {
data.frame(
df = ifelse(is.null(names(dfs)), rep(d,ncol(dfs[[d]])), names(dfs)[d]),
col = names(dfs[[d]]),
type=sapply(dfs[[d]],typeof),row.names = NULL)
})
)
}
用法
df_types(list("a" = df1,"b" = df2))
輸出:
df col type
1 a kpi_id character
2 a kpi_val double
3 b kpi_id character
4 b kpi_val character
uj5u.com熱心網友回復:
使用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.classwhich 回傳第一個:
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"
uj5u.com熱心網友回復:
這是另一個選項 usingtidyverse并添加了 using janitoranddata.table以將其轉換為所需的格式:
library(tidyverse)
lst(df1, df2) %>%
map_dfr(., ~ map_df(.x, class), .id = "var") %>%
data.table::transpose(keep.names = "var") %>%
janitor::row_to_names(1) %>%
as_tibble() %>%
column_to_rownames("var")
輸出
df1 df2
kpi_id character character
kpi_val numeric character
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/472058.html
