R语言多数据框列类型匹配检测的简化实现方法咨询
解决方案
1. 替代你想要的xyzfunction的简洁写法
你可以直接用sapply(df, class)来获取数据框所有列的类型向量,完全满足你想要的“类似colnames()的列类型获取”需求:
# 封装成函数更方便复用 get_col_types <- function(df) sapply(df, class) # 检测两个数据框列类型是否一致 all(get_col_types(df_1) == get_col_types(df_2)) all(get_col_types(df_1) == get_col_types(df_3)) # 合并检测所有目标数据框 all(c( all(get_col_types(df_1) == get_col_types(df_2)), all(get_col_types(df_1) == get_col_types(df_3)) ))
如果习惯用purrr包,写法会更简洁:
library(purrr) all(map_chr(df_1, class) == map_chr(df_2, class))
2. 批量检测多个数据框的高效写法
如果要检查的数据框数量较多,把它们放进列表里批量处理会省去重复代码:
# 将所有待检测的数据框存入列表 df_list <- list(df_1, df_2, df_3) # 批量检查列名是否全部一致 all(sapply(df_list, function(x) all(colnames(x) == colnames(df_list[[1]])))) # 批量检查列类型是否全部一致 all(sapply(df_list, function(x) all(sapply(x, class) == sapply(df_list[[1]], class))))
3. 同时验证列名和列类型的合并写法
可以把两项检查封装成一个函数,一次性完成验证:
check_df_schema <- function(df_list) { # 以列表中第一个数据框为基准 base_colnames <- colnames(df_list[[1]]) base_coltypes <- sapply(df_list[[1]], class) # 遍历所有数据框做一致性检查 all(sapply(df_list, function(df) { all(colnames(df) == base_colnames) && all(sapply(df, class) == base_coltypes) })) } # 使用示例:传入数据框列表即可得到结果 check_df_schema(list(df_1, df_2, df_3))
内容的提问来源于stack exchange,提问作者Aggressor Prime
相关产品推荐
相关产品推荐

