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))
我不认为这是有效的,因为我的前两列是文本而不是所有数字。
有没有办法只计算基于行的计算中的数字?
答案 0 :(得分:6)
您可以使用[
选择相关变量,如下所示:
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
答案 1 :(得分:4)
summary(t(xx))
summary()
可以按列获取统计信息,因此请使用t()
。