但我只对使用for(){}命令对其中四个运行一些统计信息感兴趣....... dataset = b1
ELEV SLOPE ASPECT presab
2342.569 0.297 109.502 1
2280.851 0.997 106.433 2
2281.271 0.665 93.872 1
2277.854 2.407 215.193 2
2271.858 1.132 32.050 1
2229.149 0.000 270.000 1
多个变量(高程,坡度,方位); 通过presab; 并将它们导出为工作环境中的三个R对象???
首先我尝试了这个.....它有点工作......
>i=1
>for (i in 1:1) {
v1=tapply(b1$ASPECT,b1$presab,mean)
v2=tapply(b1$ELEV,b1$presab,mean)
v3=tapply(b1$SLOPE,b1$presab,mean)
v4=cbind(v1,v2,v3)
print(v4)}
# v1 v2 v3
#1 137.3997 2400.974 4.075000
#2 131.2396 2400.301 3.306509
>vars=c("b1$ELEV","b1$SLOPE","b1$ASPECT")
>i=1
>for (i in 1:3) {
tapply(b1$ASPECT,b1$presab,mean),
tapply(b1$ELEV,b1$presab,mean),
tapply(b1$SLOPE,b1$presab,mean)}
答案 0 :(得分:1)
>ex17out <- matrix(0,3,6)
for (i in 1:2) {
temp <- subset(b3,presab==i)
ex17out[1,i*3-2] <- mean(temp$ASPECT)
ex17out[1,i*3-1] <- sd(temp$ASPECT)
ex17out[1,i*3] <- length(temp$ASPECT)
ex17out[1,i*3-2] <- mean(temp$ASPECT)
ex17out[1,i*3-1] <- sd(temp$ASPECT)
ex17out[1,i*3] <- length(temp$ASPECT)
ex17out[2,i*3-2] <- mean(temp$ELEV)
ex17out[2,i*3-1] <- sd(temp$ELEV)
ex17out[2,i*3] <- length(temp$ELEV)
ex17out[2,i*3-2] <- mean(temp$ELEV)
ex17out[2,i*3-1] <- sd(temp$ELEV)
ex17out[2,i*3] <- length(temp$ELEV)
ex17out[3,i*3-2] <- mean(temp$SLOPE)
ex17out[3,i*3-1] <- sd(temp$SLOPE)
ex17out[3,i*3] <- length(temp$SLOPE)
ex17out[3,i*3-2] <- mean(temp$SLOPE)
ex17out[3,i*3-1] <- sd(temp$SLOPE)
ex17out[3,i*3] <- length(temp$SLOPE)
}
>ex17out
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 131.599609 86.628193 46 135.00713 75.039541 182
[2,] 2276.916891 44.433890 46 2431.90777 179.167677 182
[3,] 4.066087 4.654311 46 3.59589 4.826945 182
答案 1 :(得分:0)
使用自定义函数和plyr
包的方式。
首先,您构建一个函数来计算您选择的摘要统计信息并作为命名向量返回:
statistics <- function(x, na.omit=TRUE){
fun_names <- c("Length", "Mean", "SD")
if(na.omit)
x <- x[!is.na(x)]
n <- length(x)
m <- mean(x)
s <- sd(x)
stats <- c(n,m,s)
names(stats) <- fun_names
return(stats)
}
然后,在presab
定义的每个peace data.frame中,将此函数应用于所需的所有变量。来自ddply
套餐的plyr
让这项任务变得轻而易举:
library(plyr)
summary <- ddply(b1, "presab", function(df) statistics(df[ , sapply(df, is.numeric)]))
对此处发生的事情的一个小解释:ddply会将data.frame b1
除以presab
值,并在每个值中应用(匿名)函数。此函数将计算b1
中存在的所有数字变量的统计信息。 sapply(df, is.numeric)
部分确保仅尝试使用数字变量来计算其摘要。