Как написать функцию, которая вычисляет описательную статистику для числовых и категориальных переменных? - PullRequest
0 голосов
/ 10 марта 2019

У меня есть следующие образцы данных:

ID GLUC TGL HDL LDL HRT MAMM SMOKE

A   88   NA  32  99   Y   NA never

B   NA   150 60  NA  NA   no never

C   110   NA NA 120   N   NA    NA

D   NA   200 65 165  NA  yes never

Мне нужно написать функцию, которая для числовых переменных вычисляет среднее значение, медиану, STD и подсчитывает количество пропущенных значений (NMiss). Для символьных переменных мне нужно составить таблицу значений каждого уровня переменной и подсчитать количество пропущенных значений.

Мой желаемый результат - это список длиной 2. Каждый компонент списка является либо фреймом данных, который содержит статистику, либо значением NULL, например:

table1 (dat=patient, numvar=c("TGL", "HDL", "LDL"), 
charvar=c("HRT", "MAMM"))

$numericStats

varName    MEAN  MEDIAN       SD  NMiss

TGL   180.66667   180.0 23.03620      4

HDL    55.66667    62.5 19.00175      4

LDL   160.28571   165.0 40.06126      3


$FactorStats

varName group count

    HRT    N      2

           Y      3

       NMiss      5

   MAMM   no      2

         yes      4

       NMiss      4

Что я имею до сих пор функции:

table1 <- function(dat, varlist){

if (!all(is.element(varlist, names(dat))))

stop ("One or more of the variables are not in the data.")

result <- matrix(numeric(length(varlist)*5), nrow = length(varlist))

for (i in 1:length(varlist)){

var_select <- dat[[varlist[i]]]

mean_value <- round(mean(var_select, na.rm=T),2)

median_value = round(median(var_select, na.rm=T),2)

SD <- round(sd(var_select, na.rm=T),2)

N <- length(var_select[!is.na(var_select)])

N_miss <- length(var_select[is.na(var_select)])

result[i,] <- c(mean_value, median_value, SD, N, N_miss) + }

colnames(result) <- c("Mean", "Median", "SD", "N", "N_miss")

rownames(result) <- varlist

return(result)

}

Я не могу понять, как включить категориальные факторы в мою функцию. Любая помощь с благодарностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...