如何将R语言table命令的结果合并回原数据框?
实现方法
以下是几种在R中实现将table函数的频数结果合并回原数据框的常用方案:
Base R 方案
利用ave()函数按分组计算每组行数,直接生成新列:
df$table <- ave(df$points, df$position, FUN = length)
这里ave()会根据position分组,对任意列(此处用points仅作为占位,实际不影响结果)计算组内行数,也就是该position的频数,结果会自动匹配到原数据框的每一行。
tidyverse(dplyr)方案
如果习惯用tidyverse语法,可以用dplyr的分组计算功能:
library(dplyr) df <- df %>% group_by(position) %>% mutate(table = n()) %>% ungroup()
group_by(position)按位置分组,n()返回每组的行数,mutate新增列后用ungroup()取消分组,避免后续操作受分组状态影响。
转换table结果后合并方案
先把table的输出转换为数据框,再和原数据框合并:
# 将table结果转为数据框并修正列名 pos_freq <- as.data.frame(table(df$position)) colnames(pos_freq) <- c("position", "table") # 合并原数据框 df <- merge(df, pos_freq, by = "position")
这种方法先把频数表结构化,再通过merge()按position列匹配,实现频数的批量填充。
内容的提问来源于stack exchange,提问作者Arturo
相关产品推荐
相关产品推荐

