在plyr中使用多个变量

use*_*144 2 r plyr

我正在尝试使用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  ")
Run Code Online (Sandbox Code Playgroud)

我正在尝试创建一个表,总结两个变量的营业额.基本上结合以下代码

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))
Run Code Online (Sandbox Code Playgroud)

结果如下

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

如何在不进行多个操作和子集的情况下实现此目的并在之后进行组合?

提前致谢.

Jus*_*tin 6

我想你只想要外国或中小企业的价值'Y'......如果是这样的话.我会使用 meltdcastreshape2包而不是plyr.

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
Run Code Online (Sandbox Code Playgroud)

如果您想查看它们之间的差异Y,N也可以将它们添加到公式中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
> 
Run Code Online (Sandbox Code Playgroud)