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

在R语言中为数据框添加动态变量:按专利分组计算temp列和

刚好最近经常处理这类分组统计的需求,给你分享两个实用的解决方案,不管你习惯用dplyr(tidyverse生态)还是原生Base R都能完美匹配你的需求~

方法一:使用dplyr(推荐,易读且扩展性强)

如果平时习惯用tidyverse工具链,这个方法最直观,还能轻松应对更多temp列的情况:

library(dplyr)

# 先构造你提供的数据
patent <- c(1,2,2)
temp1 <- c(TRUE,FALSE,FALSE)
temp2 <- c(FALSE,TRUE,TRUE)
df <- data.frame(patent,temp1,temp2)

# 生成目标新列
df_final <- df %>%
  group_by(patent) %>%  # 按patent分组
  mutate(
    new1 = sum(temp1),  # 计算每组temp1的求和
    new2 = sum(temp2)   # 计算每组temp2的求和
    # 🌟 如果你的temp列很多(比如temp1到temp10),可以用across批量处理:
    # across(starts_with("temp"), ~sum(.), .names = "new{str_remove(col, 'temp')}")
    # 这样会自动生成new1对应temp1,new2对应temp2...不用手动写每一列
  ) %>%
  ungroup()  # 取消分组(可选,看后续需求)

print(df_final)

方法二:使用Base R(无需额外包,轻量简洁)

如果不想加载第三方包,用原生的ave函数就能快速实现,它专门用来按分组计算统计量并返回和原数据长度一致的结果:

# 构造数据
patent <- c(1,2,2)
temp1 <- c(TRUE,FALSE,FALSE)
temp2 <- c(FALSE,TRUE,TRUE)
df <- data.frame(patent,temp1,temp2)

# 添加新列
df$new1 <- ave(df$temp1, df$patent, FUN = sum)
df$new2 <- ave(df$temp2, df$patent, FUN = sum)

print(df)

最终输出结果

两种方法都会得到你想要的目标数据框:

patent temp1 temp2 new1 new2
1      1  TRUE FALSE    1    0
2      2 FALSE  TRUE    0    2
3      2 FALSE  TRUE    0    2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:11:09