使用datawizard::standardize生成z分数后pivot_longer绘图报错求助
解决datawizard::standardize后pivot_longer的属性冲突问题
问题根源是datawizard::standardize生成的z分数列带有特殊的dw_transformer属性,不同列的这些属性包含各自的标准化参数(均值、标准差等),结构不统一,导致pivot_longer合并列时触发属性兼容性检查报错。
给你两种直接的解决办法:
方法1:移除现有z分数列的特殊属性
在select之后、pivot_longer之前,把所有.z列转成普通数值类型,剥离额外属性:
df %>% filter(index.visit == visit) %>% select(ends_with(".z")) %>% mutate(across(everything(), as.numeric)) %>% # 移除特殊属性,转为普通数值 pivot_longer(cols = everything()) %>% ggplot(aes(x = name, y = value)) + geom_quasirandom(size = .1)
方法2:生成z分数时直接禁用属性保留
调用datawizard::standardize时设置keep_attributes = FALSE,这样生成的列就是普通数值,后续操作不会有属性冲突:
# 假设你是这样生成z分数的,修改为: df <- df %>% mutate( across( c(variable1, variable2), # 替换成你要标准化的列名 ~datawizard::standardize(., keep_attributes = FALSE), .names = "{col}.z" ) ) # 之后再运行你的绘图代码就不会报错了 df %>% filter(index.visit == visit) %>% select(ends_with(".z")) %>% pivot_longer(cols = everything()) %>% ggplot(aes(x = name, y = value)) + geom_quasirandom(size = .1)
两种方法都能解决问题,选哪种看你的需求:如果已经生成了带属性的.z列,用方法1;如果还没生成,用方法2更高效。
内容的提问来源于stack exchange,提问作者anonymous
相关产品推荐
相关产品推荐

