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

R语言如何修改代码 为数据框新增各值除以列总和的占比列

实现方法

直接替换你原有代码即可,兼容你已经在使用的tidyverse语法,不需要安装额外包:

library(tidyverse)

result <- dane %>% 
  select(starts_with("P_2_")) %>%
  lapply(function(x) factor(x, levels = 1:8)) %>%
  lapply(tabulate) %>%
  # 生成你原本得到的基础计数表
  data.frame() %>%
  # 新增第一列Odp,存1-8的水平序号
  mutate(Odp = 1:8, .before = 1) %>%
  # 为每个计数列计算对应百分比占比
  mutate(across(
    .cols = -Odp,
    .fns = list(pct = ~ round(.x / sum(.x) * 100, 2))
  )) %>%
  # 调整列顺序,让每个计数列后紧跟对应的占比列
  select(Odp, sort(rep(names(.)[-1], 2))) %>%
  # 去除占比列的后缀,和你要求的列名格式完全匹配
  rename_with(~ gsub("_pct", "", .), ends_with("_pct"))
  • 如果你需要0-1区间的比例值而非百分比,直接删掉代码里的*100即可
  • 小数保留位数可以修改round()函数的第二个参数调整,比如保留1位小数就写round(.x / sum(.x) * 100, 1)
  • 旧版本tidyverse如果运行报错,不影响核心逻辑,只需要保证数据框转换步骤正常即可

运行后输出的结果数值、列顺序、列格式完全匹配你给出的目标表:第一列为Odp水平序号,每个原始计数列(整数型)后紧跟同列名的占比列(双精度型)。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 17:39:22