如何统计data.table中指定列的每行频率?附示例数据
统计data.table中指定列的每行频率
看起来你需要计算data.table里每行counts列的频率占比(也就是每行数值在整列总和中的比例),用data.table的原生语法可以高效完成这个需求,下面是具体实现方法:
方法1:原地新增频率列(推荐,data.table高效操作)
直接在原数据表中新增一列frequency,存储每行的频率值:
# 直接计算并新增列 dat[, frequency := counts / sum(counts)]
这样操作后,原dat表会多出一列frequency,每行的值就是对应counts在整个列中的占比。如果需要控制小数位数让结果更易读,可以用round()函数:
# 保留4位小数的频率计算 dat[, frequency := round(counts / sum(counts), 4)]
方法2:创建新表不修改原数据
如果不想改动原始数据表,可以生成一个包含频率列的新表:
# 创建包含频率列的新data.table dat_with_freq <- dat[, .(kmers, counts, frequency = counts / sum(counts))]
验证说明
拿你的数据举个例子:所有counts的总和为16361 + 10090 + 9599 + 9021 + 8516 + 8325 + 5739 + 5642 + 5378 + 5326 = 83997,第一行的频率就是16361 / 83997 ≈ 0.1948,上面的代码会自动完成这类计算并填充到对应行。
内容的提问来源于stack exchange,提问作者david
相关产品推荐
相关产品推荐

