-4

16 列に編成されたdata.frameデータがあります。最初は名前、2 番目は日付、残りの 14 は指標です。

お気に入り:

      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)たが、うまくいきませんでした。

4

1 に答える 1

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
于 2013-09-19T17:20:18.057 に答える