sapply - сохранить имена столбцов - PullRequest
0 голосов
/ 22 мая 2018

Я пытаюсь суммировать среднее значение, SD и т. Д. Для ряда различных столбцов (переменных) в моем наборе данных.Я кодировал свою собственную функцию суммирования, чтобы вернуть именно то, что мне нужно, и использую sapply, чтобы применить эту функцию ко всем переменным одновременно.Он работает нормально, однако возвращаемый фрейм данных не имеет имен столбцов, и я не могу даже переименовать их, используя ссылку на номер столбца - иначе они кажутся невозможными для использования любым способом.

Мой код ниже - какЯ просто нахожу сводную статистику, я хотел бы просто включить те же имена столбцов (переменных), с 4 строками (среднее, SD, мин, макс).Есть ли вообще способ сделать это (даже медленный способ, когда я вручную изменяю имена столбцов)

 #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

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Если вы предоставляете имена в ответ во время определения функции, вы можете иметь имена строк в качестве имен функций, если вы предоставляете имена списков при определении вашего объекта, тогда вы можете использовать USE.NAMES в sapply для автоматического получения имен.

Пример данных 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
0 голосов
/ 22 мая 2018

Если нам также нужны имена столбцов, просто переберите набор данных (при условии, что мы применяем функцию ко всем столбцам)

out <- sapply(df2, sfsum)
row.names(out) <- c('mean', 'sd', 'min', 'max')

data

set.seed(24)
df2 <- as.data.frame(matrix(rnorm(4*4), 4, 4))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...