2

xx

head(xx,1)
     Sport    variable 2012.07.01 2012.07.02 2012.07.03 2012.07.04 2012.07.05 2012.07.06 2012.07.07 2012.07.08 2012.07.09 2012.07.10 2012.07.11 2012.07.12 2012.07.13 2012.07.14 2012.07.15 2012.07.16 2012.07.17
1 Soccer Likes         13         13         14         12         11         11         NA          9         16         11         12         15         10         NA         13          9         10
  2012.07.18 2012.07.19 2012.07.20 2012.07.21 2012.07.22 2012.07.23 2012.07.24 2012.07.25 2012.07.26 2012.07.27 2012.07.28 2012.07.29 2012.07.30 2012.07.31 2012.08.01 2012.08.02 2012.08.03 2012.08.04 2012.08.05
1         16         10         17         NA         10         15         14         11         11         13         NA         13         26        987        898        162        146         NA        257
  2012.08.06 2012.08.07 2012.08.08 2012.08.09 2012.08.10 2012.08.11 2012.08.12 2012.08.13 2012.08.14 2012.08.15 2012.08.16 2012.08.17 2012.08.18 2012.08.19 2012.08.20 2012.08.21 2012.08.22 2012.08.23 2012.08.24
1        370        443        490        612        646         NA        311        371        432        512        610        734         NA       1002        931        886        190        317        386
  2012.08.25 2012.08.26 2012.08.27 2012.08.28 2012.08.29 2012.08.30 2012.08.31 2012.09.01 2012.09.02 2012.09.03 2012.09.04 2012.09.05 2012.09.06 2012.09.07 2012.09.08 2012.09.09 2012.09.10 2012.09.11 2012.09.12
1         NA        586        812        904        863        941        922         NA        150        146        175        132        254        330         NA        198        281        254        316
  2012.09.13 2012.09.14 2012.09.15 2012.09.16 2012.09.17 2012.09.18 2012.09.19 2012.09.20 2012.09.21 2012.09.22 2012.09.23 2012.09.24 2012.09.25 2012.09.26 2012.09.27 2012.09.28 2012.09.29 2012.09.30 2012.10.01
1        416        594         NA        668        745        972        984        885        496         NA        687        734        767        832        965        934         NA        200        225
  2012.10.02 2012.10.03 2012.10.04 2012.10.05 2012.10.06 2012.10.07 2012.10.08 2012.10.09 2012.10.10 2012.10.11       SD Mean        Max   Min mean
1        219        181        198        229         NA        364        431        492        592        612 336.9102   NA soccer     9   NA

次の式を使用して、各行ごとに行の標準偏差、平均、最大、最小などを計算しようとしています:

transform(xx, SD=apply(xx,1, sd, na.rm = TRUE)) 
transform(xx, Mean=apply(xx,1, mean, na.rm = TRUE)) 
transform(xx, Max=apply(xx,1, max, na.rm = TRUE)) 
transform(xx, Min=apply(xx,1, min, na.rm = TRUE)) 

最初の 2 列はすべて数値ではなくテキストであるため、これが機能しているとは思いません。

行ベースの計算で数値を計算する方法はありますか?

4

2 に答える 2

7

[次のように、関連する変数を選択するために使用できます。

set.seed(007)
X <- data.frame(matrix(sample(c(10:20, NA), 100, replace=TRUE), ncol=10))
sex <- sample(c('F', 'M'), 10, T)
reg <- sample(c('N', 'S', 'E', 'W'), 10, T)
DF <- cbind(sex, reg, X)
DF # this is your data.frame
       sex reg X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
1    F   E NA 12 17 18 19 16 12 13 20  14
2    F   S 14 12 13 13 14 18 16 17 20  10
3    F   N 11 19 NA 12 19 19 19 20 12  20
4    F   E 10 11 20 12 15 17 18 17 18  12
5    M   E 12 15 NA 14 20 18 16 11 14  18
6    F   E 19 11 10 20 13 14 17 16 10  16
7    M   E 14 16 17 15 10 11 15 15 11  16
8    F   W NA 10 15 19 19 12 15 15 19  14
9    M   N 11 NA NA 20 20 14 14 17 14  19
10   F   W 15 13 14 15 NA 13 15 NA 15  12

ご覧のとおり、最初から変数までは数値ではありません。それを見るために使いますsapply(DF, class)

[上記のように使用すると、すべての数値変数を選択できます

DF[,-c(1,2)] # selecting all variables but 1 and 2

これらの変数で計算を実行できるようになりました

transform(DF, SD=apply(DF[,-c(1,2)],1, sd, na.rm = TRUE))  # and so on
   sex reg X1 X2 X3 X4 X5 X6 X7 X8 X9 X10       SD
1    F   E NA 12 17 18 19 16 12 13 20  14 3.041381
2    F   S 14 12 13 13 14 18 16 17 20  10 3.020302
3    F   N 11 19 NA 12 19 19 19 20 12  20 3.865805
4    F   E 10 11 20 12 15 17 18 17 18  12 3.496029
5    M   E 12 15 NA 14 20 18 16 11 14  18 2.958040
6    F   E 19 11 10 20 13 14 17 16 10  16 3.596294
7    M   E 14 16 17 15 10 11 15 15 11  16 2.449490
8    F   W NA 10 15 19 19 12 15 15 19  14 3.201562
9    M   N 11 NA NA 20 20 14 14 17 14  19 3.356763
10   F   W 15 13 14 15 NA 13 15 NA 15  12 1.195229

別の代替手段は次のとおりです。

newDF <- DF[,sapply(DF, is.numeric)]
transform(DF, SD=apply(newDF,1, sd, na.rm = TRUE))
   sex reg X1 X2 X3 X4 X5 X6 X7 X8 X9 X10       SD
1    F   E NA 12 17 18 19 16 12 13 20  14 3.041381
2    F   S 14 12 13 13 14 18 16 17 20  10 3.020302
3    F   N 11 19 NA 12 19 19 19 20 12  20 3.865805
4    F   E 10 11 20 12 15 17 18 17 18  12 3.496029
5    M   E 12 15 NA 14 20 18 16 11 14  18 2.958040
6    F   E 19 11 10 20 13 14 17 16 10  16 3.596294
7    M   E 14 16 17 15 10 11 15 15 11  16 2.449490
8    F   W NA 10 15 19 19 12 15 15 19  14 3.201562
9    M   N 11 NA NA 20 20 14 14 17 14  19 3.356763
10   F   W 15 13 14 15 NA 13 15 NA 15  12 1.195229

どの変数が数値であるかを知る必要がないため、R がそれらを選択します。

編集

これはより良いアプローチでしょう

基本統計の関数を定義する

  Stats <- function(x){
      Mean <- mean(x, na.rm=TRUE)
      SD <- sd(x, na.rm=TRUE)
      Min <- min(x, na.rm=TRUE)
      Max <- max(x, na.rm=TRUE)
      return(c(Mean=Mean, SD=SD, Min=Min, Max=Max))
    }

    cbind(DF, t(apply(newDF,1, Stats))) # Where newDF is define as above 
   sex reg X1 X2 X3 X4 X5 X6 X7 X8 X9 X10     Mean       SD Min Max
1    F   E NA 12 17 18 19 16 12 13 20  14 15.66667 3.041381  12  20
2    F   S 14 12 13 13 14 18 16 17 20  10 14.70000 3.020302  10  20
3    F   N 11 19 NA 12 19 19 19 20 12  20 16.77778 3.865805  11  20
4    F   E 10 11 20 12 15 17 18 17 18  12 15.00000 3.496029  10  20
5    M   E 12 15 NA 14 20 18 16 11 14  18 15.33333 2.958040  11  20
6    F   E 19 11 10 20 13 14 17 16 10  16 14.60000 3.596294  10  20
7    M   E 14 16 17 15 10 11 15 15 11  16 14.00000 2.449490  10  17
8    F   W NA 10 15 19 19 12 15 15 19  14 15.33333 3.201562  10  19
9    M   N 11 NA NA 20 20 14 14 17 14  19 16.12500 3.356763  11  20
10   F   W 15 13 14 15 NA 13 15 NA 15  12 14.00000 1.195229  12  15
于 2012-10-12T18:27:49.480 に答える