3

R に読み込んで要約する必要がある多くの dbf テーブル (別のプログラムでの分析からの出力) があります。各 dbf には、さまざまなエッジまたはコアの生息地クラスを表す多数の列があります。以前の分析に応じて、異なる dbf ファイルは異なる数のコア クラスとエッジ クラス (列) を持つため、たとえば [2:4] のインデックス値の一貫した範囲で単純に合計することはできません。

存在する列 (合計用) とそれらの列のインデックス番号を判断するために、次のループを作成しました。これは、マスター リスト (ae) に対して現在のテーブル名をチェックし、列が存在する場合は、現在のデータ フレーム内の列のインデックス番号を取得します。

#read in all the possible edge column names
    ae<-c("VALUE_1","VALUE_3","VALUE_5","VALUE_9","VALUE_33","VALUE_35","VALUE_37","VALUE_65","VALUE_67","VALUE_69","VALUE_101","VALUE_103","VALUE_105","VALUE_109","VALUE_133","VALUE_135","VALUE_137","VALUE_165","VALUE_167","VALUE_169")

#Create and empty data frame and turn off stringsAsFactors:
options(stringsAsFactors=FALSE)
edgeIndices<-data.frame()

#for each column name, get the index number 
for (i in ae) {
  index<-which(colnames(currfile)==i)

  #check to see if ae is in currfile
  #if it is, get the index number, if not skip ahead
  if (length(index)>0){ edgeIndices<-rbind(edgeIndices,c(index, i)) }
  else {}
}

#for some reason the index number is coming in as a character
#also, I need to figure out how to bring in the label without 
# it forcing to factor (I     have changed the global parameter for now)

#name the columns
names(edgeIndices)=c("Index","Label")

#change the index to a number:
edgeIndices$Index<-as.numeric(edgeIndices$Index)

ここに私の出力があります:

  Index   Label
1 3       VALUE_1
2 4       VALUE_3
3 5       VALUE_9
4 7       VALUE_33
5 8       VALUE_35
6 9       VALUE_65
7 10      VALUE_67
8 12      VALUE_101

rowSums()それで、私の質問は、適切なインデックス番号を持つ列だけが合計されるように、インデックス値を関数に渡すにはどうすればよいですか?

たとえば、以下の場合、値 1、3、および 9 のみを合計する必要があり、これはインデックス 3、4、および 5 になります。

OID_    VALUE_0 VALUE_1 VALUE_3 VALUE_9 SUM
4473    181800  15300   200700  0   216000
4474    239400  6300    153000  0   159300
4475    296100  13500   86400   0   99900
4

0 に答える 0