R自定义函数输出数据框时自动出现25%行名的原因及移除方法
出现
25%行名的原因 - R内置的
quantile()函数默认返回带命名属性的数值向量,分位点对应的名字就是0%、25%、50%、75%、100%这类格式。 - 你代码中取Q1值时用到的
quantile(z)[2],本质是取出了向量里名为25%的元素,这个元素本身保留了原有的名称属性。R在生成单行data.frame时,只要任意一个输入列的元素携带名称,就会自动把这个名称提取为整个数据框的行名,最终输出时左侧就会显示25%的标识。
移除行名的操作方案
- 方案一:计算所有从分位数函数取到的值时,用
unname()包裹去掉自带的命名属性。这样构造data.frame时没有可提取的名称,R就会默认用数字序号当行名,不会出现25%的异常标识。 - 方案二:在函数返回结果前,手动将数据框的行名设置为空字符串,直接实现“行名位置显示为空白”的效果。只要在
return(outdata)语句前添加一行代码rownames(outdata) <- ""即可,不管之前自动生成了什么行名都会被直接覆盖。
修改后的函数示例
norm <- function(z){ n = as.numeric(table(is.na(z))[1]) m = mean(z, na.rm=T) stddev = sd(z, na.rm=T) outdata = data.frame(n=n, mean=round(m, digits = 1), sd=round(stddev, digits = 1), median=round(unname(median(z)), digits = 1), Q1=round(unname(quantile(z)[2]), digits = 1), Q3=round(unname(quantile(z)[4]), digits = 1), lower_t.dist=round(m-sqrt(1+(1/n)) * qt(0.975, df=n-1) * stddev, digits = 1), upper_t.dist=round(m+sqrt(1+(1/n)) * qt(0.975, df=n-1) * stddev, digits = 1), lower_frac = round(unname(quantile(z, probs = c(0.025))), digits = 1), upper_frac = round(unname(quantile(z, probs = c(0.975))), digits = 1)) rownames(outdata) <- "" return(outdata) }
内容的提问来源于stack exchange,提问作者cmirian
相关产品推荐
相关产品推荐

