在plyr中使用多变量
我试图使用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
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