私はRを初めて使用し、ループについて質問があります
私の実際のデータセットには、80 か国の 15 部門と 6 種類の組織で 7000 の観測がありますが、ここでは単純化した例を示します。
country <- c("a","a","a","a","a","a","b","b","b","b","b","b",
"c","c","c","c","c","c","d","d","d","d","d","d")
sector <- c("a","a","a","b","c","c","a","b","b","b","c","c",
"b","b","b","b","c","c","a","a","b","b","c","c")
organization <-c("a","b","c","c","b","a","a","b","b","c","b","b",
"c","a","a","b","b","c","c","b","a","a","b","c")
budget <-c(2,4,3,5,9,7,5,4,3,6,1,2,4,5,6,1,5,3,4,2,3,5,4,6)
table <- data.frame(country, sector, organization, budget)
私が欲しいのは:
- 特定の国における特定のセクターのさまざまな種類の組織の数。
- さまざまな種類の組織に与えられたセクターの総予算の割合。
まず、国「a」とセクター「a」からの情報のみを選択するサブセットを作成する必要があります
smalltable <-subset(table, (country == "a") & (sector == "a"))
それから私の最初の質問に答えてください 国の各部門にそれぞれのタイプの組織がいくつありますか
smalltable$count <- table(smalltable$organization)
次に、財政のパーセンテージを見つける必要があります
smalltable$percentage <- smalltable$budget / sum(smalltable$budget)
それから私はtapplyを使いました
N <- tapply(smalltable$count, smalltable$organization, FUN=sum)
financialshare <- tapply(smalltable$percentage, smalltable$organization, FUN=sum)
そして最後にこれを組み合わせました:
total <- data.frame (smalltable$country,smalltable$sector,smalltable$organization, N,financialshare)
total
これは私が必要とする小さなテーブルです!
しかし、これは 15 のセクターすべてと 80 か国すべてで必要なので、すべてのセクターのループを実行し、すべての国でこのループを繰り返すある種のループ関数が必要です。1 つの国 (つまり 15 セクター) に関するすべての情報を 1 つのテーブルにまとめて、これらのテーブルを可能な限り凝縮する必要があります。また、スペースを節約するために、テーブルからゼロ値を削除する必要があります。
どのように進める必要がありますか?