如何识别R数据集变量的数据类型并统计各类型列数
识别R语言数据集变量类型并统计各类型列数
针对给定的R语言数据集,需完成以下任务:
- 识别每个变量的数据类型(class)
- 创建包含各数据类型对应列数的DataFrame
原数据集代码
df <- structure(list(`Patient MRN` = c(20238782, 20290640, 20159980, 20176641, 20302197), `Stainless Steel Crowns` = c(8, 8, 8, 7, 6), `Zirconia Crowns` = c(NA_real_, NA_real_, NA_real_, NA_real_, NA_real_), `Canine Zirconia` = c(2, 0, 0, 0, 3), Overbite...5 = c(0.5, 0, 1, 0, 0.1), Overjet...6 = c("1mm", "0mm", "1mm", "1mm", "1mm"), `Canine overlap` = c("2mm", "1mm", "2mm", "0mm", "1mm"), `Posterior open bite` = c("N", "N", "N", "N", "N"), Overbite...9 = c(0, 0, 0.5, -0.3, -0.2), Overjet...10 = c("2mm", "0mm", "1mm", "1mm", "1mm"), `Canine Overlap...11` = c("1mm", "-1mm", "1mm", "-1mm", "1mm"), `Posterior Open Bite...12` = c("N", "N", "N", "N", "N"), Overbite...13 = c(0, 0, 1, -0.2, 0.1), Overjet...14 = c("0", "1mm", "1mm", "1mm", "1mm"), `Canine Overlap...15` = c("2mm", "1mm", "2mm", "-1mm", "1mm"), `Posterior Open Bite...16` = c("N", "N", "N", "N", "N"), `Change in Overbite` = c(0, 0, 0.5, 0.1, 0.3), `Change in Canine Overlap (mm)` = c(1, 2, 1, 0, 0), `Change Score` = c(1, 1, 2, 1, 1), Date = c("45139", "45145", "45162", "45146", "45148"), Overbite...21 = c(NA, NA, NA, NA, NA), Overjet...22 = c(NA, NA, NA, NA, NA), `Canine Overlap...23` = c(NA, NA, NA, NA, NA), `Posterior Open Bite...24` = c(NA, NA, NA, NA, NA)), row.names = c(NA, -5L), class = c("tbl_df", "tbl", "data.frame"))
修正后的实现步骤
原代码中summary(df)返回的是变量统计摘要,并非数据类型,无法直接用于统计各类型列数。以下是正确实现:
1. 获取每个变量的数据类型
使用sapply()遍历数据集,提取每个变量的类型:
# 获取所有变量的class var_classes <- sapply(df, class) # 查看各变量类型结果 var_classes
输出示例:
Patient MRN Stainless Steel Crowns Zirconia Crowns Canine Zirconia "numeric" "numeric" "numeric" "numeric" Overbite...5 Overjet...6 Canine overlap Posterior open bite "numeric" "character" "character" "character" Overbite...9 Overjet...10 Canine Overlap...11 Posterior Open Bite...12 "numeric" "character" "character" "character" Overbite...13 Overjet...14 Canine Overlap...15 Posterior Open Bite...16 "numeric" "character" "character" "character" Change in Overbite Change in Canine Overlap (mm) Change Score Date "numeric" "numeric" "numeric" "character" Overbite...21 Overjet...22 Canine Overlap...23 Posterior Open Bite...24 "logical" "logical" "logical" "logical"
2. 统计各类型列数并生成DataFrame
用table()统计类型频次,再转换为结构化DataFrame:
# 统计各数据类型的列数 class_counts <- as.data.frame(table(var_classes)) # 重命名列名使其更直观 colnames(class_counts) <- c("数据类型", "列数") # 查看最终统计结果 class_counts
输出结果:
数据类型 列数 1 character 10 2 logical 4 3 numeric 10
内容的提问来源于stack exchange,提问作者firmo23
相关产品推荐
相关产品推荐

