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

R语言:依据dataframe中公司ID出现频次为新增di_Flex列赋值

R实现按公司ID出现频次赋值的方法

你可以根据自己的使用习惯选择tidyverse方案或者base R方案:

tidyverse(dplyr)方案

代码逻辑:先按公司ID分组统计每组行数,再按规则匹配赋值

# 加载依赖包
library(dplyr)

# 假设你的数据框名为df,公司ID列名为company_id,请替换为实际列名
df <- df %>%
  group_by(company_id) %>%
  mutate(
    id_cnt = n(),
    di_Flex = case_when(
      id_cnt == 2 ~ 6,
      id_cnt == 3 ~ 8,
      id_cnt == 4 ~ 10,
      id_cnt == 5 ~ 12.8,
      id_cnt == 6 ~ 14.67,
      id_cnt >= 7 ~ 16
    )
  ) %>%
  ungroup() %>%
  select(-id_cnt) # 不需要保留计数列可执行这行删除

注意:dplyr的n()函数默认会将NA作为单独分组统计频次,无需额外设置。

base R方案

代码逻辑:先统计所有ID的出现频次,再匹配到原数据后按规则赋值

# 假设你的数据框名为df,公司ID列名为company_id,请替换为实际列名
# 统计频次,加useNA = "always"参数可统计NA的出现次数
id_freq <- table(df$company_id, useNA = "always")
# 将频次匹配到原数据
df$id_cnt <- id_freq[as.character(df$company_id)]
# 按规则赋值di_Flex
df$di_Flex <- ifelse(df$id_cnt == 2, 6,
              ifelse(df$id_cnt == 3, 8,
              ifelse(df$id_cnt == 4, 10,
              ifelse(df$id_cnt == 5, 12.8,
              ifelse(df$id_cnt == 6, 14.67,
              ifelse(df$id_cnt >=7, 16, NA))))))
# 不需要保留计数列可执行 df$id_cnt <- NULL 删除

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 09:48:02