sapply - сохранить имена столбцов
Я пытаюсь суммировать среднее значение, SD и т. Д. Для ряда различных столбцов (переменных) в моем наборе данных. Я кодировал свою собственную функцию суммирования, чтобы вернуть именно то, что мне нужно, и использую sapply, чтобы применить эту функцию ко всем переменным одновременно. Он работает нормально, однако возвращаемый фрейм данных не имеет имен столбцов, и я не могу даже переименовать их, используя ссылку на номер столбца - иначе они кажутся невозможными для использования каким-либо образом.
Мой код ниже - так как я просто нахожу сводную статистику, я хотел бы просто использовать те же имена столбцов (переменных), с 4 строками (среднее, sd, min, max). Есть ли способ сделать это (даже медленный способ, когда я вручную изменяю имена столбцов)
#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 ответа
Если вы предоставляете имена в ответ во время определения функции, вы можете иметь имена строк в качестве имен функций, если вы предоставляете имена списков при определении вашего объекта, вы можете использовать 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
Если нам также нужны имена столбцов, просто переберите набор данных (при условии, что мы применяем функцию ко всем столбцам)
out <- sapply(df2, sfsum)
row.names(out) <- c('mean', 'sd', 'min', 'max')
данные
set.seed(24)
df2 <- as.data.frame(matrix(rnorm(4*4), 4, 4))