[英]Grouping and checking for a condition in R
我有兩個表: restaurant_trans
和restaurant_master
restaurant_trans
具有名稱,日期,net_sales
這是一個交易文件,其中記錄了50家餐廳的銷售情況,每個餐廳記錄了30天(1500磅)。
restaurant_master
名稱為go.live.date,專營權
這是一個帶有餐廳名稱的主文件,“ go.live.date”是餐廳中特定設備的安裝日期。
我想查找安裝該設備前后餐廳的凈銷售額。 我首先要對數據進行分組。
我嘗試使用此代碼對數據進行分組
dummayvar = 0;
for (i in 1:nrow(restaurant_master)){
for (j in 1:nrow(restaurant_trans)){
if(restaurant_trans$Restaurant.Name[j]==restaurant_master$Restaurant.Name[i]){
if(restaurant_trans$Date[j] < restaurant_master$Go.Live.Date[i]){
append(dummayvar, restaurant_trans$Date)
}
}
}
}
這給出了一個錯誤:
“因素的水平集不同”
請幫忙!!
考慮使用merge()而不是嵌套的for
循環。 只需按名稱合並餐廳netsales
和master
數據框,然后根據凈銷售日期和主數據netsales
合並子數據框。 最后,按餐廳名稱和特許經營權或單獨匯總銷售凈額。
# DATA FRAME EXAMPLES
netsales <- data.frame(name=c('A', 'A', 'A', 'A', 'A',
'B', 'B', 'B', 'B', 'B',
'C', 'C', 'C', 'C', 'C'),
date=c('6/1/2015', '6/15/2015', '7/1/2015', '9/1/2015', '11/15/2015',
'6/5/2015', '6/20/2015', '7/15/2015', '8/1/2015', '10/15/2015',
'6/10/2015', '7/10/2015', '8/15/2015', '9/20/2015', '9/30/2015'),
net_sales=c(1500, 600, 1200, 850, 750,
1120, 560, 720, 340, 890,
1150, 410, 300, 250, 900))
netsales$date <- as.Date(strptime(netsales$date, '%m/%d/%Y'))
str(netsales)
master <- data.frame(name=c('A', 'B', 'C'),
go.live.date=c('7/25/2015', '8/1/2015', '7/1/2015'),
franchise=c('R Co.', 'Python, Inc.', 'C# Ltd.'))
master$go.live.date <- as.Date(strptime(master$go.live.date, '%m/%d/%Y'))
str(master)
# MERGE AND AGGREGATE BEFORE GO LIVE SALES
beforelive <- merge(netsales, master, by='name')
beforelive <- beforelive[beforelive$date < beforelive$go.live.date,]
beforelivesales <- aggregate(net_sales ~ name + franchise, beforelive, FUN=sum)
# MERGE AND AGGREGATE AFTER GO LIVE SALES
afterlive <- merge(netsales, master, by='name')
afterlive <- afterlive[afterlive$date >= afterlive$go.live.date,]
afterlivesales <- aggregate(net_sales ~ name + franchise, afterlive, FUN=sum)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.