2016-05-08 1 views
0

Пытается вывести итоговую статистику, используя summarize от rockchalk package. Хотите, чтобы статистика округлялась до 2 десятичных знаков. Я получаю сообщение об ошибке, когда , используя round на summarize.Результаты округления результатов обобщаются с ошибкой

library(rockchalk) 
M1 <- structure(c(0.18, 0.2, 0.24, 0.35, -0.22, -0.17, 0.28, -0.28, -0.14, 0.03, 0.87, -0.2, 0.06, -0.1, -0.72, 0.18, 0.01, 0.31, -0.36, 0.61, -0.16, -0.07, -0.13, 0.01, -0.09, 0.26, -0.14, 0.08, -0.62, -0.2, 0.3, -0.21, -0.11, 0.05, 0.06, -0.28, -0.27, 0.17, 0.42, -0.05, -0.15, 0.05, -0.07, -0.22, -0.34, 0.16, 0.34, 0.1, -0.12, 0.24, 0.45, 0.37, 0.61, 0.9, -0.25, 0.02), .Dim = c(56L, 1L)) 

#This works 
round(apply(M1, 2, mean),2) 

#This works 
summaryround <- function(x) {round(summary(x),2)} 
apply(M1, 2, summaryround) 

#This gives error "non-numeric argument" 
round(apply(M1, 2, summarize),2) 

#Thought this would work but also gives error "non-numeric argument" 
summarizeround <- function(x) {round(summarize(x),2)} 
apply(M1, 2, summarizeround) 

Любые идеи? Я могу объединить вывод summary, но хочу использовать summarize , если это возможно, поскольку мне нравится получать выходы эксцесса и асимметрии в той же распечатке (конечно, может создать мою собственную функцию, объединяющую summary и kurtosis и все, что я хочу, а не если этого избежать).


РЕДАКТИРОВАТЬ: должен был упомянуть, что это действительно работает на большом кадре данных; превратил его в матрицу из 1 столбца, как я думал, упростил бы воспроизводимый пример.

ответ

2

Вам просто нужно извлечь numerics поле из summarize результата. Кроме того, я бы предпочел использовать lapply, чтобы сохранить имена ростов и использовать do.call(bind,...), если у вас есть несколько столбцов для подведения итогов.

summarizeround <- function(x) {round(summarize(x)$numerics,2)} 
summaryDf <- do.call(cbind, lapply(as.data.frame(M1), summarizeround)) 

      x 
0%  -0.72 
25%  -0.16 
50%  0.02 
75%  0.24 
100%  0.90 
mean  0.04 
sd  0.32 
var  0.10 
skewness 0.45 
kurtosis 0.56 
NA's  0.00 
N  56.00 
+0

Psidom вы знаете, как сохранить имена столбцов, а не получать «x»? Ваш код отлично работает, но я запускаю его в кадре данных с несколькими сотнями столбцов, для чего нужны имена столбцов. Благодаря! – Krug

+1

Вы можете разделить сводку на два шага на 'summaryList <- lapply (as.data.frame (M1), summizeround); summaryDf <- as.data.frame (do.call (cbind, summaryList)) ', а затем присваивать имена именам данных reuslt dataframe (summaryDf) <- names (summaryList)' – Psidom

0

? Rockchalk :: summary говорит, что аргумент должен быть кадром данных. Таким образом, сделать M1 данные кадра

M1<-as.data.frame(M1) 
summarize(M1) 

$numerics 
       V1 
0%  -0.7200 
25%  -0.1625 
50%  0.0150 
75%  0.2400 
100%  0.9000 
mean  0.0400 
sd  0.3152 
var  0.0993 
skewness 0.4485 
kurtosis 0.5626 
NA's  0.0000 
N  56.0000 

$factors 
NULL 

И получить округление

> round(summarize(M1)[[1]],2) 
      V1 
0%  -0.72 
25%  -0.16 
50%  0.02 
75%  0.24 
100%  0.90 
mean  0.04 
sd  0.32 
var  0.10 
skewness 0.45 
kurtosis 0.56 
NA's  0.00 
N  56.00 
+0

Что такое отказ на скале? – greengrass62

+0

Запуск 'round (summary (M1), 2)' дал ту же ошибку. Код предназначен для большого количества столбцов, поэтому выбор столбца 1 невозможен. Большое спасибо в любом случае! – Krug