2017-02-26 8 views
0

지역 목록 $ X1, 지역 $ X2, 지역 $ X3, 지역 $ X4, ... 영역 $ X100. 각 클래스 개체는 숫자입니다. 이러한 객체는 SpatialPixelsDataFrame의 결과에서 추출됩니다. 다른 동물 트랙의 버퍼 영역을 1에서 100까지 계산했습니다.이름 목록에서 문자를 추출하여 숫자로 명령을 내림

예. 지역 $ X1은 00000011110101100000 입니다. 1 영역 $ (X1)으로, 그래서이 1의 개수를 제공하고, 따라서 좀 버퍼 영역의 사이즈를 줄 것이다 날 1,504

제공 명령

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

사용.

그러나 다른 모든 개체에 대해 동일한 작업을 수행하고 싶습니다. 영역 $ X2에서 영역 $ X100까지 동일하게 작업하고 싶습니다. 그리고 평균 1s의 수를 계산하십시오. 나는이 과정을 자동화하고 싶다. 내가 어떻게 해?

현재, 내가 한 일은 이름

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의, 당신은 단지 하나의

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

그렇지 않은 경우의 수를 얻을 수 colSums을 사용할 수 있습니다 그리고 당신은 당신은 단지 하나의와 값의 수를 계산되도록하려면, 당신은 지역 ==를 설정할 수 1

colSums(area == 1) 

더 복잡한 계산

이있는 경우 당신은 또한 나중에 참조 할 수 있도록 (? 또는 행 방향, 참조 적용) 열 현명한 기능을 반복 적용 할 수 있습니다 예를

를 들어 7,463,210

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

영역이 SpaitalPiexelsDataFrame 클래스 –

+0

에 적용 옵션이 있기 때문에 colSums가 작동하지 않습니까? – 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에 대한 영역의 분산을 계산하는 방법이 있습니까?