我正在尝试使用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)
如何在不进行多个操作和子集的情况下实现此目的并在之后进行组合?
提前致谢.
我想你只想要外国或中小企业的价值'Y'......如果是这样的话.我会使用 melt和dcast从reshape2包而不是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)