DevCN
菜单
全部文章快讯开发科技深度热点

R 数据框:按标签分组并防止字段类型误读

构建任务数据框,按标签累计分钟数并排序,理解列类型、分组结果和字符标签的表示方式。


本节目标

构建任务数据框,按标签累计分钟数并排序,理解列类型、分组结果和字符标签的表示方式。

环境与运行方法

准备 R 4.x,保存为 lesson.R,执行 Rscript lesson.R。只使用基础 R,不安装 tidyverse。示例用 cat 固定输出格式,便于直接核对结果。

核心思路

数据框把等长列组织成记录。标签应作为字符列,分钟数作为数值列,分组前先确认字段类型。aggregate 可以按标签对数值求和,结果再显式排序。

完整示例

tasks <- data.frame(
  tag=c("r", "stats", "r"),
  minutes=c(20, 35, 10),
  stringsAsFactors=FALSE
)
totals <- aggregate(minutes ~ tag, data=tasks, FUN=sum)
totals <- totals[order(totals$tag), ]
for (i in seq_len(nrow(totals))) {
  cat(totals$tag[i], "=", totals$minutes[i], "\n", sep="")
}
cat("original=", nrow(tasks), "\n", sep="")

预期输出

r=30
stats=35
original=3

逐步理解

公式 minutes~tag 表达按 tag 分组计算 minutes,FUN=sum 选择累计。排序后依次输出,原数据框仍有三条记录,没有被分组结果替换。

seq_len 在行数为零时给出空索引,避免 1:n 在 n 为零时产生意外序列。来自文件的数值列可能读成字符或因子,不能不检查就强制转数字,尤其因子转换可能得到内部编码。

常见问题与边界

  • 1:n 在 n=0 时并不表示空循环。
  • 分组前应明确缺失值处理规则。
  • 因子转数值需要理解标签与内部编码的差别。

动手练习

追加标签 r、分钟数 5,再查看分组和原始行数。

参考答案

r 变为 35,stats 仍为 35,原始行数为 4。分组结果行数表示标签数量,不是原始记录数量。

下载推广海报

文章推广海报

《R 数据框:按标签分组并防止字段类型误读》完整推广海报
DISCUSSION

文章回复

0 条公开回复
未登录回复需要审核后公开
还没有回复,欢迎参与讨论。