如何扩展透视后的数据框?获取参数全组合方法问询
实现参数值的全笛卡尔积组合
你之前的方法是按行号匹配X和Y的值,所以只得到了前3组对应配对,后面的X值因为没有同序号的Y值,结果显示为NA。要得到所有X和Y值的组合,本质是求两个参数值集合的笛卡尔积,可以用以下几种简单方法实现:
方法1:用tidyr的crossing函数
先提取X和Y各自的取值,再用crossing生成所有组合:
library(tidyr) # 提取X和Y的取值 x_values <- df$value[df$parameter == "X"] y_values <- df$value[df$parameter == "Y"] # 生成全组合 crossing(X = x_values, Y = y_values)
方法2:用dplyr的cross_join函数
先拆分出X和Y的独立数据框,再做交叉连接:
library(dplyr) df_x <- df %>% filter(parameter == "X") %>% select(X = value) df_y <- df %>% filter(parameter == "Y") %>% select(Y = value) cross_join(df_x, df_y)
方法3:Base R原生实现
不需要加载任何扩展包,用基础的expand.grid函数就能搞定:
expand.grid( X = df$value[df$parameter == "X"], Y = df$value[df$parameter == "Y"], stringsAsFactors = FALSE # 可选,避免自动把字符转成因子类型 )
以上三种方法都会生成15行(5个X值 × 3个Y值)的全组合结果,和你期望的输出完全一致。
内容的提问来源于stack exchange,提问作者Jonas Reklaitis
相关产品推荐
相关产品推荐

