Функция повтора для поиска описательной статистики для нескольких столбцов данных

#r #function #sapply

Вопрос:

Пытаюсь выполнить функцию повтора и описательную статистику. Строка ниже

 print (table <- data.frame(replicate(5,sample(50:100,10,rep=TRUE))))
 

создает таблицу на изображении.простая таблица данных

Я хотел бы сделать некоторую описательную статистику по столбцам X1 и X4, используя приведенную ниже кодировку.

 GenStats <- function(x){
  newMatrix <- matrix (1:8, nrow = 1)
  colnames(newMatrix) <- c("Mean", "Median", "Maximum", "Variance", "Minimum", "Skewness",
                           "Kurtosis", "Std.Dev")
  rownames(newMatrix) <- "Key Statistics" 
  newMatrix[1,] <- c(mean(x), median(x), max(x), var(x), min(x),
                     skewness(x), kurtosis(x), sd(x))
  newMatrix
}
 

Я могу заставить это работать для 1 образца, например

x

Тогда мой вопрос — как мне посмотреть на два образца (обработанных независимо), например, X1 и X4?

Я попробовал это —

 x <- c("table$X1", "table$X4")
 

но это не сработало.

Затем я попытался использовать sapply, например

 sapply(x, function(x) {
    (x[, c(mean, median, sd)])
    }) 
 

но получил неожиданное»} » в сообщении об ошибке.

Как всегда, был бы признателен, если бы кто-нибудь мог меня направить.

Заранее спасибо.

Комментарии:

1. Что x у тебя в кармане sapply() ? У вас есть function(y) , но он не y используется. Кроме того, что такое y ? (первый в sapply )

2. Прошу прощения, Сотос, исправили.

Ответ №1:

Решает ли это вашу проблему?

 library(dplyr)
output <- sapply(table %>% select(X1,X4), FUN = GenStats)
rownames(output) <- c("Mean", "Median", "Maximum", "Variance", "Minimum", "Skewness",
                      "Kurtosis", "Std.Dev")
output
                  X1           X4
Mean      78.9000000  76.10000000
Median    84.0000000  74.50000000
Maximum   96.0000000  95.00000000
Variance 286.9888889 222.54444444
Minimum   52.0000000  53.00000000
Skewness  -0.4325578  -0.03126238
Kurtosis  -1.5714491  -1.59510245
Std.Dev   16.9407464  14.91792360
 

Изменить: Вы можете заменить X1 и X4 в первой строке, чтобы применить функцию к нужным столбцам

Комментарии:

1. Не используйте apply на фреймах данных. apply принуждает к матрице перед любыми операциями, что делает ее неэффективной. Вы должны использовать его только в том случае, если входные данные являются матрицей. Для фреймов данных, sapply или lapply лучше

2. Я всего этого не знал @Sotos, спасибо за эти знания. Поэтому я редактировал с помощью sapply

3. Монджяньян, какая библиотека требуется, чтобы я мог использовать %>%>>.? … не удалось найти функцию…

4. Извините, это dplyr

5. Зачем загружать dplyr только для выбора столбцов? Почему бы просто не sapply(table[c('X1', 'X4')], GenStats)

Ответ №2:

Вы могли бы использовать describe из psych библиотеки:

 library(psych)
describe(table[,c("X1", "X4")])
 

Выход:

    vars  n mean    sd median trimmed   mad min max range skew kurtosis   se
X1    1 10 67.2 16.61   61.5   65.25 14.83  50 100    50 0.64    -1.08 5.25
X4    2 10 72.6 15.92   73.0   72.62 22.24  53  92    39 0.00    -1.90 5.03
 

ИЛИ: с вашей собственной функцией
С lapply уведомлением skewness изменяется на перекос и kurtosis на kurtosi

 library(psych)
GenStats <- function(x){
    newMatrix <- matrix (1:8, nrow = 1)
    colnames(newMatrix) <- c("Mean", "Median", "Maximum", "Variance", "Minimum", "Skewness",
                             "Kurtosis", "Std.Dev")
    rownames(newMatrix) <- "Key Statistics" 
    newMatrix[1,] <- c(mean(x), median(x), max(x), var(x), min(x),
                       skew(x), kurtosi(x), sd(x))
    newMatrix
}

lapply(table[,c(1,4)], GenStats)

 

Выход:

 $X1
               Mean Median Maximum Variance Minimum  Skewness  Kurtosis  Std.Dev
Key Statistics 67.2   61.5     100 275.9556      50 0.6432985 -1.079559 16.61191

$X4
               Mean Median Maximum Variance Minimum    Skewness Kurtosis  Std.Dev
Key Statistics 72.6     73      92 253.3778      53 0.004540284 -1.90361 15.91784