次のようなデータフレームがあります
df<-data.frame(date=c(rep("1/27/2010",times=30)),
loc1=c(rep(9:13,each=6)),
loc2=c(rep(c("N","E","W"),each=2)),
loc3=c(rep(c(1,2))),
tr1=c(rep(c(0,1),each=15)),
tr2=c(0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1),
tr3=c(1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4),
Birth=c(sample(c("early","late"),30,replace=TRUE,prob=c(0.5,0.5))),
Species=c(rep(c("A","B"),times=15)),
Status=c(sample(c(0,1),30,replace=TRUE,prob=c(0.7,0.3))))
df<-rbind(df,df)
loc1、loc2、tr1、tr2、tr3、Birth、および Species で定義された行を使用して、loc3 の値ごとに個別の列を作成したいと考えています。これらの値を共有するすべての観測値のステータスを「カウント」し、そのカウントを loc3 でグループ化したいと考えています。
reshape2 パッケージの dcast を使用する予定でした。
必要な「カウント」を実行する関数を作成しました。私は R に不慣れで、これを行う関数があると確信していますが、すぐには見つけることができませんでした。タスクの単純さを考えると、自分でスクリプトを作成してみる価値のある演習のように思えました。
d.count<-function(x){
j=0
for (i in 1:length(x))
if (is.na(x{i])){
j<-j+0
}else if(x[i]==0){
j<-j+1
} else if(x[i]==1){
j<-j+0
}
return(j)
}
0 はカウントを増やす必要があり、1 と NA はカウントを増やすべきではありません。
そう
df_1<-dcast(df,date+loc1+loc2+tr1+tr2+tr3+Birth+Species~loc3,value.var="Status",fun.aggregate=d.count)
エラーが発生します
Error in if (is.na(x[i])) { : argument is of length zero
これにより、dcast が fun.aggregate をどのように扱っているかを理解していないと思います...
助けてくれてありがとう!-JJE