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

如何在R中将含国家与数值的两列表格转换为除法表?

用tidy风格实现除法表转换

可以借助tidyverse工具链完成这个需求,核心是通过交叉连接生成所有国家的配对组合,计算比值后转成宽表,具体步骤如下:

示例代码

library(tidyverse)

# 构造示例数据(替换成你的实际数据)
df <- tibble(
  Country = c("USA", "China", "Japan", "Germany"),
  Value = c(100, 80, 50, 60)
)

# 生成除法表
division_table <- df %>%
  # 交叉连接自身,得到所有国家的行/列配对
  cross_join(df, suffix = c("_row", "_col")) %>%
  # 计算行国家数值除以列国家数值的结果
  mutate(ratio = Value_row / Value_col) %>%
  # 转换为宽表格式,行是行国家,列是列国家
  pivot_wider(
    id_cols = Country_row,
    names_from = Country_col,
    values_from = ratio
  ) %>%
  # 可选:将行标识列重命名为更直观的名称
  rename(国家 = Country_row)

# 查看结果
print(division_table)

代码说明

  • cross_join(df, df):把原始数据和自身做交叉连接,生成所有可能的国家配对(包括国家自身和自身的配对),后缀区分行和列对应的字段。
  • mutate(ratio = Value_row / Value_col):计算每一组配对的数值除法结果。
  • pivot_wider():将长格式的配对数据转换为宽表,让行名和列名都是国家名称,单元格填充对应的除法结果。

如果不需要保留“国家自身除以自身”的行/列,可以在cross_join之后添加filter(Country_row != Country_col)过滤掉这类组合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 03:01:12