2017-02-26 25 views
0

我有一個對象列表:區域$ X1,區域$ X2,區域$ X3,區域$ X4,...區域$ X100。每個類別對象是數字。這些對象是從SpatialPixelsDataFrame的結果中提取的。我計算了從1到100的不同動物軌跡的緩衝區域。從名稱列表中提取字符並將其設置爲數字命令

例如,面積$ X1是 0,0,0,0,0,0,1,1,1,1,1,0,1,1,0,0,0,0,0 我想統計的數量1區$ X1,所以我用命令

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

這給了我1504

這將給1的個數,從而給我的緩衝區的大小。

但是,我想對所有其他對象(區域$ 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 

它不會是0和1的表它只包含一個元素,它的名稱是「區域$ X1」。

我試圖刪除引號,但它沒有幫助。

任何人都可以幫助我嗎? 謝謝!

回答

0

如果您所在的地區只有00或11的,你可以使用colSums拿到1的

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

如果不是,數量,你要確保你只用1的計算值的數量,您可以設置區域== 1

colSums(area == 1) 

您還可以使用適用於迭代函數逐列(或行方向,看到了嗎?申請),以供將來參考,如果你有更復雜的計算

apply(area, 2, function(x) sum(x == 1)) 
mean_area <- mean(apply(area, 2, function(x) sum(x == 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

colSums沒有工作,因爲面積在SpaitalPiexelsDataFrame類 –

+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的面積方差?

相關問題