使用反引号处理带空格列名时触发mutate方法报错的原因与解决
问题分析与解决
你的错误和反引号无关,核心问题是**mutate()只能处理数据框/tibble,而你在转置后得到的是矩阵对象**。
错误原因
do.call(cbind, lapply(df, summary))生成的是矩阵,t()转置后依然是矩阵类型,而dplyr的mutate()函数没有针对矩阵的实现,所以抛出了no applicable method的错误。反引号选择带空格的列名本身是正确的,只是用错了对象类型。
解决方法
转置后先把矩阵转换成数据框(或tibble),再使用mutate(),反引号可以正常生效:
library(tidyverse) library(survival) df <- colon[colon$etype==2, c("time", "age")] num_summary <- do.call(cbind, lapply(df, summary)) %>% t() %>% as.data.frame() %>% # 将矩阵转为数据框,这是关键步骤 mutate(Interquatrile = `3rd Qu.` - `1st Qu.`)
如果想要更符合tidyverse风格的输出,可以用as_tibble()并保留行名:
num_summary <- do.call(cbind, lapply(df, summary)) %>% t() %>% as_tibble(rownames = "Variable") %>% # 把原行名转为"Variable"列 mutate(Interquatrile = `3rd Qu.` - `1st Qu.`)
内容的提问来源于stack exchange,提问作者Nemo
相关产品推荐
相关产品推荐

