R 两列聚合

R 两列聚合,r,R,我有一个数据集,包含商店不同分支机构的商品价格,看起来有点像这样: Item,Chain,Branch1,Branch2,Branch3 Laptop,Sears,1000,1100,900 Laptop,JCP,1300,900,1200 Laptop,Macys,1500,1800,1700 TV,Sears,800,600,700 TV,JCP,400,600,700 TV,Macys,900,1000,1100 我想要的是:对于每个独特的商品和连锁店组合,计算三个分支店的中间价 我尝试

我有一个数据集,包含商店不同分支机构的商品价格,看起来有点像这样:

Item,Chain,Branch1,Branch2,Branch3
Laptop,Sears,1000,1100,900
Laptop,JCP,1300,900,1200
Laptop,Macys,1500,1800,1700
TV,Sears,800,600,700
TV,JCP,400,600,700
TV,Macys,900,1000,1100
我想要的是:对于每个独特的商品和连锁店组合,计算三个分支店的中间价

我尝试了一些类似的方法

aggregate(data[,3:5], list(data$Item, data$Chain), median)
但它不起作用。关于如何解决这个问题,你有什么想法吗?

你可以使用
groupby()
summary()

库(dplyr)
df%
分组依据(项目、链)%>%
总结(中位数=中位数(c(Branch1、Branch2、Branch3)))
您可以使用
分组依据()
摘要()

库(dplyr)
df%
分组依据(项目、链)%>%
总结(中位数=中位数(c(Branch1、Branch2、Branch3)))

问题在于
聚合()
聚合每一列

为完整起见,以下是一些替代方法:

1.基本R行方向
apply()
2. <代码>数据表 3. <代码>数据.表格在重新调整为长格式后 在聚合之前,请执行以下操作以将宽格式重塑为长格式:

library(data.table)
melt(setDT(dat), c("Item", "Chain"))[, .(median = median(value)), by = .(Item, Chain)]
资料 由于
data
df
是R函数的名称,我将使用不同的名称以避免难以调试的名称冲突的风险:

dat <- data.table::fread("
Item,Chain,Branch1,Branch2,Branch3
Laptop,Sears,1000,1100,900
Laptop,JCP,1300,900,1200
Laptop,Macys,1500,1800,1700
TV,Sears,800,600,700
TV,JCP,400,600,700
TV,Macys,900,1000,1100")

dat问题在于
aggregate()
聚合每一列

为完整起见,以下是一些替代方法:

1.基本R行方向
apply()
2. <代码>数据表
3. <代码>数据.表格在重新调整为长格式后 在聚合之前,请执行以下操作以将宽格式重塑为长格式:

library(data.table)
melt(setDT(dat), c("Item", "Chain"))[, .(median = median(value)), by = .(Item, Chain)]
资料 由于
data
df
是R函数的名称,我将使用不同的名称以避免难以调试的名称冲突的风险:

dat <- data.table::fread("
Item,Chain,Branch1,Branch2,Branch3
Laptop,Sears,1000,1100,900
Laptop,JCP,1300,900,1200
Laptop,Macys,1500,1800,1700
TV,Sears,800,600,700
TV,JCP,400,600,700
TV,Macys,900,1000,1100")

dat
Item
的每个组合只有一行,
Chain
是一个SQL标记,您可以执行:
聚合(分支~Item+Chain,重塑(数据,3:5,dir=“long”,sep=”“),中值)
Item
的每个组合只有一行,
Chain
是一个SQL标记,您可以这样做:
aggregate(Branch~Item+Chain,restrape(data,3:5,dir=“long”,sep=“”),media)
您也可以在分组之前收集(Branch,Price,-Item,-Chain),然后进行总结(media=media(Price))。您还可以在分组之前收集(分支、价格、-项目、-链),然后进行汇总(中位数=中位数(价格))。
     Item Chain median
1: Laptop Sears   1000
2: Laptop   JCP   1200
3: Laptop Macys   1700
4:     TV Sears    700
5:     TV   JCP    600
6:     TV Macys   1000
library(data.table)
melt(setDT(dat), c("Item", "Chain"))[, .(median = median(value)), by = .(Item, Chain)]
     Item Chain median
1: Laptop Sears   1000
2: Laptop   JCP   1200
3: Laptop Macys   1700
4:     TV Sears    700
5:     TV   JCP    600
6:     TV Macys   1000
dat <- data.table::fread("
Item,Chain,Branch1,Branch2,Branch3
Laptop,Sears,1000,1100,900
Laptop,JCP,1300,900,1200
Laptop,Macys,1500,1800,1700
TV,Sears,800,600,700
TV,JCP,400,600,700
TV,Macys,900,1000,1100")