2013-09-19 4 views
-5

У меня есть data.frame с данными, организованными в 16 столбцах: сначала с именами, вторыми с датами других 14 с метриками.R-программа для расчета некоторых статистических данных

Как:

 name date hight weight .... 
     John 1950 1.81 78 
     John 1948 1.60 60 
     Susan 1985 1.40 40 . 
     Susan 1995 1.45 60 

Я хочу, чтобы выполнить некоторые основные статистики (среднее, SD, и т.д.) для каждого имени, то есть: средние высоты Джона, вес и т.д.; имею в виду Сьюзен, рост, вес и т.д.

Для того, чтобы сделать это, сначала я написал функцию:

mysummary <- function(x){ 
    setNames(c(mean(x), sd(x), skewness(x), kurtosis(x)), 
      c("Mean", "SD", "Skewness", "Kurtosis")) 
} 

Но когда я исполню ее с помощью команды:

summaryStatic = by(data[,c('height','weight')], list(data$name), function(x){ 
    y <- sapply(x, FUN =mysummary(as.numeric(x))) 
    return(y) 
}) 

Но Я получил следующее сообщение об ошибке:

Error in mean(x) : (list) object cannot be coerced to type 'double' 

Я знаю, что есть несколько связанных с data.frame структурой. как вы видите, я попытался решить проблему с as.numeric(x), но это не сработало.

+0

Как возможно, у вас есть «матрица», созданная символом, датами и цифрами ??? У вас есть 'data.frame' или матрица с ТОЛЬКО символами, содержащими только число и даты (но принужденные к char)? – Michele

+0

Пожалуйста, улучшите свой вопрос - он плохо структурирован и как-то не сфокусирован. Это затрудняет последующее наблюдение и особенно ответит на него. – Jost

+0

Спасибо за комментарий. Матрица данных ... У меня есть .txt-файл, и для его чтения я использовал функцию read.delim. – user2794659

ответ

0

Я не уверен, но, возможно, это делает то, что вы хотите. Если да, просто добавьте больше сводной статистики:

my.data <- read.table(text = ' 
     name date height weight 
     John 1950 1.81 78 
     John 1948 1.60 60 
     Susan 1985 1.40 40 
     Susan 1995 1.45 60 
', header = TRUE, stringsAsFactors = FALSE) 

with(my.data, aggregate(height ~ name, FUN = function(x) c(SD = sd(x), MEAN = mean(x)))) 

with(my.data, aggregate(weight ~ name, FUN = function(x) c(SD = sd(x), MEAN = mean(x)))) 

with(my.data, aggregate(cbind(height, weight) ~ name, FUN = function(x) c(SD = sd(x), MEAN = mean(x)))) 

    name height.SD height.MEAN weight.SD weight.MEAN 
1 John 0.14849242 1.70500000 12.72792 69.00000 
2 Susan 0.03535534 1.42500000 14.14214 50.00000 

with(my.data, aggregate(my.data[,3:4], by = list(name), FUN = function(x) c(SD = sd(x), MEAN = mean(x)))) 

    Group.1 height.SD height.MEAN weight.SD weight.MEAN 
1 John 0.14849242 1.70500000 12.72792 69.00000 
2 Susan 0.03535534 1.42500000 14.14214 50.00000 
Смежные вопросы