次のデータフレームがあります。
df<-structure(list(totprivland = c(175L, 50L, 100L, 14L, 4L, 240L,
10L, 20L, 20L, 58L), ncushr8d1 = c(0L, 0L, 0L, 0L, 0L, 30L, 5L,
0L, 0L, 50L), ncu_CENREG1 = structure(c(4L, 4L, 4L, 4L, 1L, 3L,
3L, 3L, 4L, 4L), .Label = c("Northeast", "Midwest", "South",
"West"), class = "factor"), ncushr8d2 = c(75L, 50L, 100L, 14L,
2L, 30L, 5L, 20L, 20L, 8L), ncu_CENREG2 = structure(c(4L, 4L,
4L, 4L, 1L, 2L, 1L, 4L, 3L, 4L), .Label = c("Northeast", "Midwest",
"South", "West"), class = "factor"), ncushr8d3 = c(100L, NA,
NA, NA, 2L, 180L, 0L, NA, NA, NA), ncu_CENREG3 = structure(c(4L,
NA, NA, NA, 1L, 1L, 3L, NA, NA, NA), .Label = c("Northeast",
"Midwest", "South", "West"), class = "factor"), ncushr8d4 = c(NA,
NA, NA, NA, 0L, NA, NA, NA, NA, NA), ncu_CENREG4 = structure(c(NA,
NA, NA, NA, 1L, NA, NA, NA, NA, NA), .Label = c("Northeast",
"Midwest", "South", "West"), class = "factor")), .Names = c("totprivland",
"ncushr8d1", "ncu_CENREG1", "ncushr8d2", "ncu_CENREG2", "ncushr8d3",
"ncu_CENREG3", "ncushr8d4", "ncu_CENREG4"), row.names = c(27404L,
27525L, 27576L, 27822L, 28099L, 28238L, 28306L, 28312L, 28348L,
28379L), class = "data.frame")
=======
dput
次の基本的な考え方は次のとおりです。
Total VariableA LocationA VariableB LocationB
30 20 East 10 East
20 20 South NA West
115 15 East 100 South
100 50 West 50 West
35 10 East 25 South
合計 (dput の例では totprivland) は変数 (ncushr8d1、ncushr8d2、ncushr8d3、および ncushr8d4) の合計であり、各変数には対応する因子位置変数 (ncu_CENREG1 など) があります。この同じパターンには、さらに 6 つの変数と場所があります。多くの場合、位置変数は、複数の数値変数に対して同じ値になります (たとえば、例の最初の行のように複数の「東」位置値)。
共通の位置係数によって各行の値の合計を取得し、各位置の合計に対して新しい列を作成したいと思います。NA 値を無視する機能を使用すると、次のようになります。
Total VariableA LocationA VariableB LocationB TotalWest TotalEast TotalSouth
30 20 East 10 East 0 30 0
20 20 South NA NA 0 0 20
115 15 East 100 South 0 15 100
100 50 West 50 West 100 0 0
35 10 East 25 South 0 10 25
集計と分割を調べましたが、それらを非常に多くの列で機能させる方法がわかりません。また、8 つの変数すべてとそれに対応する場所をローテーションする長い "if" ステートメントも考えていますが、これにはもっと良い解決策が必要だと感じています。観測は調査パッケージで使用するために重み付けされています。後で再結合することはできますが、観測を複製して reshape パッケージで「長く」することは避けたいと思います。どんな提案でも大歓迎です!
どうもありがとう、ルーク