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
相关产品推荐
相关产品推荐

