You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R语言中基于其他数据框行数及统计组合频次创建新数据框?

让我来一步步帮你解决这两个R语言的问题:

问题1:基于另一数据框的行数创建新数据框

在R里,你可以通过nrow()函数获取目标数据框的行数,再以此为基础创建符合需求的新数据框,常见场景如下:

  • 创建空的同行数数据框:如果只需要一个和原数据框行数一致、无列的空框,可这样写:

    # 假设原数据框名为df
    new_df <- data.frame(matrix(nrow = nrow(df), ncol = 0))
    
  • 创建带序列列的新数据框:比如要添加一个从1开始的ID列,或者其他和行数匹配的序列列:

    new_df <- data.frame(
      ID = 1:nrow(df),  # 生成和原数据框行数一致的连续序列
      stringsAsFactors = FALSE  # 避免自动将字符转成因子(R4.0+版本默认已关闭该设置)
    )
    
  • 生成带重复/随机数据的新数据框:如果需要填充重复值或随机数据,结合rep()或随机函数即可:

    # 生成和df行数相同,包含分类列与随机数值列的数据框
    new_df <- data.frame(
      Category = rep("Group_A", nrow(df)),
      Value = rnorm(nrow(df)),  # 生成正态分布随机数
      stringsAsFactors = FALSE
    )
    
问题2:统计Number-Action组合的出现次数

针对你90万行的大数据量,推荐两种高效方法,都能生成包含Number、Action和Total(组合出现次数)的目标数据框:

方法1:用dplyr(语法直观,适合熟悉tidyverse的用户)

先加载dplyr包,再按Number和Action分组计数:

library(dplyr)

# 分组统计,.groups = "drop"用于取消分组状态,避免后续操作受分组影响
df_summary <- df %>%
  group_by(Number, Action) %>%
  summarise(Total = n(), .groups = "drop")

用你提供的示例数据测试,输出结果如下:

Number Action Total
1      1      a     1
2      1      b     1
3      3      b     2
4      7      a     1

方法2:用data.table(速度更快,适合大数据量)

对于90万行的数据集,data.table的运算效率会比dplyr更高,用法如下:

library(data.table)

# 将原数据框转换为data.table格式
dt <- as.data.table(df)

# 按Number和Action分组,用.N统计每组的行数
dt_summary <- dt[, .(Total = .N), by = .(Number, Action)]

运行后得到的结果和上面完全一致,但处理大数据时会更流畅。

内容的提问来源于stack exchange,提问作者HL589

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 21:38:09