-1
df <- data.frame(dive=factor(sample(c("dive1","dive2", "dive3"),20,replace=TRUE)),speed=runif(20))
> df
    dive      speed   Drift
1  dive1 0.80668490    TRUE
2  dive1 0.53349584    FALSE
3  dive2 0.07571784    TRUE
4  dive2 0.39518628    TRUE
5  dive1 0.84557955    TRUE
6  dive1 0.69121443    FALSE
7  dive1 0.38124950    TRUE
8  dive2 0.22536126    FALSE
9  dive1 0.04704750    FALSE
10 dive2 0.93561651    TRUE

この形式のデータフレームに「Drift」という名前の3番目の列があり、行の値が「TRUE」または「FALSE」であるとします。「dive」が特定の値に等しい場合、TRUEに等しい行のパーセンテージを計算するにはどうすればよいですか。つまり、dive == 1の場合、「ドリフト」列の何パーセントが「TRUE」ですか?ありがとうございました。

4

2 に答える 2

2

あなたは試すことができます:

df$Drift <- c(T,F)
sapply(split(df, df$dive), function(x) sum(x$Drift) / nrow(x) * 100 ) 
   dive1    dive2    dive3 
57.14286 42.85714 50.00000 
于 2012-07-20T10:18:23.187 に答える
0

試す

set.seed(1)
df$Drift<-sample(c(T,F),20,replace=T)

sapply(split(df,df$dive),function(x){mean(x$Drift)})

> sapply(split(df,df$dive),function(x){mean(x$Drift)})
    dive1     dive2     dive3 
0.0000000 0.7500000 0.2727273

パーセンテージが必要な場合は、平均に100を掛けます

于 2012-07-20T10:13:50.660 に答える