gpt4 book ai didi

r - 在 plyr 中使用多个变量

转载 作者:行者123 更新时间:2023-12-02 08:46:36 24 4
gpt4 key购买 nike

我正在尝试使用 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 ")

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

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

如何在不进行多次操作和子集化以及之后合并的情况下实现这一目标?

提前致谢。

最佳答案

我认为您只需要 Foreign 或 SME 为 'Y' 的值...如果是这样的话。我会使用 reshape2 包中的 meltdcast 而不是 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

如果您想查看 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
>

关于r - 在 plyr 中使用多个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11990830/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com