首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sapply -保留列名

sapply -保留列名
EN

Stack Overflow用户
提问于 2018-05-22 23:48:32
回答 2查看 4.3K关注 0票数 5

我正在尝试总结我的数据集中许多不同列(变量)的平均值、sd等。我已经编写了自己的汇总函数,以准确地返回我需要的内容,并使用sapply将该函数一次应用于所有变量。它工作得很好,但是返回的dataframe没有列名,我甚至不能使用列号引用来重命名它们--也就是它们似乎不可能以任何方式使用。

我的代码如下--因为我只是在寻找汇总统计数据,所以我只想使用相同的列(变量)名称,其中有4行(均值、sd、min、max)。有没有办法做到这一点(即使是一种缓慢的方式,我手动更改列的名称)

代码语言:javascript
复制
 #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
EN

回答 2

Stack Overflow用户

发布于 2018-05-23 00:22:26

如果您在函数定义期间提供名称作为返回,您可以将行名用作函数名称,如果您在定义对象时提供列表的名称,则可以在sapply中使用USE.NAMES自动获取名称。

一个关于mtcars数据的示例可以给出以下输出。

代码

代码语言:javascript
复制
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

输出

代码语言:javascript
复制
> 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
票数 4
EN

Stack Overflow用户

发布于 2018-05-22 23:54:27

如果我们还需要列名,只需遍历dataset (假设我们在所有列上应用该函数)

代码语言:javascript
复制
out <- sapply(df2, sfsum)
row.names(out) <- c('mean', 'sd', 'min', 'max')

数据

代码语言:javascript
复制
set.seed(24)
df2 <- as.data.frame(matrix(rnorm(4*4), 4, 4))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50471794

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档