2017-02-26 4 views
0

私はオブジェクトのリストを持っています:エリア$ X1、エリア$ X2、エリア$ X3、エリア$ X4、...エリア$ X100。それぞれのクラスオブジェクトは数値です。これらのオブジェクトは、SpatialPixelsDataFrameの結果から抽出されます。私は1から100までの異なる動物のトラックのバッファ領域を計算しました。名前のリストから文字を抽出して数値コマンドにします

例:エリア$ X1は ,0,0,0,0,0,0,1,1,1,1,0,1,0,1,0,0,0,0,0 です。エリアの$ X1で1ので、私は、これは1の数を与え、ひいては私にバッファ領域の大きさを与えるだろう、私に1504

を与えるコマンド

table<-table(area$X1) 
0  1 
600097 1504 
#extract the number of 1s 
table[[2]] 

を使用。

しかし、他のすべてのオブジェクト、領域$ X2を領域$ X100まで同じにしたいと思います。全体の1秒の平均数を計算します。私はこのプロセスを自動化したい。どうしたらいいですか?

現在、私がやったことは名前

names<-paste("area$X",1:100,sep="") 

私は私が欲しかった名前のリストを取得する一方で、「名前」の要素のクラスは文字があるのリストを作成することです。

names: "area$X1" "area$X2" "area$X3" "area$X4" "area$X5" "area$X6" "area$X7" 
..."area$X99" "area$X100" 
class(names[1]): "character" 

"area $ X1"はもはや私が望む数値ではありません。私は、コマンドしようとした場合に追加するには、今:

table(names[1]) 
    area$X1 
       1 

をそれはそれはちょうど名前「エリアの$ X1」である一つの要素を含み、0と1のテーブルで文句を言いません。

引用符を削除しようとしましたが、それが役に立たなかった。

誰もがこれを手伝ってくれますか? ありがとうございます!

答えて

0

お住まいの地域でのみ持っている場合は0または1の、あなただけの1の

colSums(area) 
mean_area <- mean(colSums(area)) 

ない場合は、数を取得するためにcolSumsを使用することができますし、あなただけの1の持つ値の数をカウントしていることを確認したいです、あなたは、より複雑な計算を持っている場合にも、(参照、または行方向?適用されます)機能の列方向を反復するために適用され、将来の参照のために使用することができます1

colSums(area == 1) 

==エリアを設定することができます例えば

area <- as.data.frame(matrix(sample(c(0,1), replace=TRUE, 50), 5, 10)) 
colnames(area) <- paste0("X", 1:ncol(area)) 

area$X1 == 1 # gives TRUE, FALSE, which is equivalent to 1, 0 and can be summed to get the number of 1's 
# [1] FALSE FALSE TRUE FALSE TRUE 
sum(area$X1) 
# [1] 2 
+0

areaがSpaitalPiexelsDataFrameのクラスにあるため、colSumsは機能しませんでした –

+0

適用オプションの運行はありますか? – Djork

+0

ありがとうございます。適用機能が機能します。しかし、各IDの面積の分散を計算する方法はありますか? –

0

あなたの答えは非常に有用です。私は最終的に次のコードを試しました

for (i in 1:length(uniqueID)){ 
b<-apply(area[i],1,function(x) sum(x == 1)) 
c<-c+sum(b) 
} 
mean<-c/length(uniqueID) 

ありがとうございました! しかし、各IDの面積の分散を計算する方法はありますか?

関連する問題