2

plyr を使用しようとしていますが、いくつかの変数を使用するのが困難です。ここに例があります。

    df <- read.table(header=TRUE, text="
    Firm Foreign SME Turnover
A1       N   Y      200
A2       N   N     1000
A3       Y   Y      100
A1       N   N      500
A2       Y   Y      200
A3       Y   Y     1000
A1       Y   N      200
A2       N   N     1000
A2       N   Y      100
A2       N   Y      200  ")

2 つの変数の売上高をまとめた表を作成しようとしています。基本的に次のコードを組み合わせます

t1 <- ddply(df, c('Firm', 'Foreign'), summarise, 
        BudgetForeign    = sum(Turnover, na.rm = TRUE))

t2 <- ddply(df, c('Firm', 'SME'), summarise, 
        BudgetSME    = sum(Turnover, na.rm = TRUE))

次の結果で

res <- read.table(header=TRUE, text="
Firm          A1   A2   A3  
BudgetForeign 200  200 1100
BudgetSME     200  500 1100")
res

複数の操作とサブセットを実行せずにこれを達成するにはどうすればよいですか?

前もって感謝します。

4

2 に答える 2

6

外国人または中小企業の値のみが必要だと思います'Y'...その場合。ではなくパッケージのmeltanddcastを使用 します。reshape2plyr

df.m <- melt(df, id.var=c('Firm', 'Turnover'))

dcast(df.m[df.m$value=='Y',], variable ~ Firm, value.var='Turnover', fun.aggregate=sum)

  variable  A1  A2   A3
1  Foreign 200 200 1100
2      SME 200 500 1100

と の違いを確認したい場合はYNの式にそれらを追加することもできますdcast

> dcast(df.m, variable + value ~ Firm, value.var='Turnover', fun.aggregate=sum)
  variable value  A1   A2   A3
1  Foreign     N 700 2300    0
2  Foreign     Y 200  200 1100
3      SME     N 700 2000    0
4      SME     Y 200  500 1100
> 
于 2012-08-16T15:58:18.300 に答える
0

ありがとうジャスティン。あなたの答えから、次のコードは私の問題を解決するはずです。

library(reshape2)
df.m <- melt(df, id.var=c('Firm', 'Turnover'))

x <- dcast(df.m, variable + value ~ Firm, value.var='Turnover', fun.aggregate=sum)


res <- rbind(
         BudgetForeign = subset(x, variable == 'Foreign' & value == 'Y'),
         BudgetSME = subset(x, variable == 'SME' & value == 'Y')
         )
res
于 2012-08-16T18:44:55.493 に答える