r - sapply - 保留列名
问题描述
我试图总结我的数据集中许多不同列(变量)的平均值、标准差等。我已经编写了自己的汇总函数以准确返回我需要的内容,并且正在使用 sapply 将此函数一次应用于所有变量。它工作正常,但是返回的数据框没有列名,我似乎甚至无法使用列号引用重命名它们 - 也就是它们似乎无法以任何方式使用。
我的代码在下面-因为我只是在查找摘要统计信息,所以我只想使用 4 行(平均值、标准差、最小值、最大值)的相同列(变量)名称。有什么办法可以做到这一点(即使是我手动更改列名的缓慢方式)
#GENERATING DESCRIPTIVE STATISTICS
sfsum= function(x){
mean=mean(x)
sd=sd(x)
min=min(x)
max=max(x)
return(c(mean,sd,min,max))
}
#
c= list(sfbalanced$age_child, sfbalanced$earnings_child,
sfbalanced$logchildinc ,sfbalanced$p_inc84, sfbalanced$login84,
sfbalanced$p_inc85, sfbalanced$login85, sfbalanced$p_inc86,
sfbalanced$login86, sfbalanced$p_inc87, sfbalanced$login87,
sfbalanced$p_inc88, sfbalanced$login88)
summ=sapply(c,sfsum)
names(summ)
NULL
解决方案
如果在函数定义期间提供名称作为回报,则可以将行名作为函数名称,如果在定义对象时提供列表名称,则可以使用USE.NAMES
insapply
自动获取名称。
数据示例mtcars
可以为您提供以下输出。
代码
sfsum= function(x){
mean=mean(x)
sd=sd(x)
min=min(x)
max=max(x)
return(c("mean"=mean,"sd"=sd,"min" = min,"max" =max)) #For rownames
}
#
x= list("mpg" = mtcars$mpg, "disp" = mtcars$disp, "drat" = mtcars$drat)
#For column names
summ=sapply(x,sfsum, USE.NAMES = TRUE) #USE.NAMES = TRUE to get names on top
输出:
> summ
mpg disp drat
mean 20.090625 230.7219 3.5965625
sd 6.026948 123.9387 0.5346787
min 10.400000 71.1000 2.7600000
max 33.900000 472.0000 4.9300000
推荐阅读
- postgresql - 查询错误 (7): 错误: "\" LINE 1 处或附近的语法错误: \copy people (supervisor_lname, supervisor_fname, lname, fn
- javascript - Amcharts 4 周期格式问题和可能的周期刻度
- javascript - 与函数一起使用时,节点子进程(Spawn)未正确返回数据
- oracle - ORA-01086 - 保存点从未在此会话中建立或无效
- kubernetes - 创建 pvc 后 Kubernetes 部署卡在挂起
- reactjs - 如何在反应羽毛笔中插入主题标签和提及的链接?
- sql - SQL递归查询获取部门代码
- ansible - 将时间戳存储为常量值
- ffmpeg - 如何在nodejs中使用fluent-ffmpeg向ffmpeg添加多个输入?
- json - 拆分后在 json 中添加方括号并在 PowerShell 中从 CSV 转换