在plyr中使用多变量

在plyr中使用多变量,r,plyr,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

我试图使用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  ")

df我认为您只需要在“外国”或“中小企业”为
'Y'
时使用值。。。如果是这样的话。我会使用
reformae2
包中的
melt
dcast
,而不是
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
谢谢你,贾斯汀。 根据您的回答,以下代码应该可以解决我的问题

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
library(重塑2)

谢谢你,贾斯汀。至少我知道从哪里开始。不过我有一个问题。它将如何工作?我希望外国和中小企业有不同的值,让我们分别说“Y”和“N”。@user1043144我不确定我是否理解。您可以将其添加到
dcast
中的公式中,并将其从
df.m[]
中删除。看我的编辑。谢谢贾斯汀。库(重塑2)df.m您可以在不使用
rbind
步骤的情况下执行此操作。。。就像我在第一个例子中做的那样,使用我在第二个例子中使用的公式<代码>资源
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
> 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
> 
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