【发布时间】:2019-08-14 07:34:43
【问题描述】:
我有一个数据框 CLIENTS: 酒店编号 国籍 到达日期 出发日期 类似的东西:
Client Nationality Hotel Dateofarrive DateofDeparture
Cl1 es h1 21/07/2019 24/07/2019
Cl2 es h1 23/07/2019 24/07/2019
Cl3 es h1 06/07/2019 10/07/2019
Cl4 es h2 05/07/2019 06/07/2019
Cl5 fr h3 01/07/2019 02/07/2019
Cl6 pt h1 07/07/2019 09/07/2019
我创建了一个数据框酒店,对于数据框的每家酒店,我都有所有西班牙国籍的客户以及他们在酒店睡觉的所有夜晚,法国国籍和葡萄牙人也是如此。 类似的东西:
Hotel CliEspan Nights CliFrench Night CliPortug Night
H1 3 8 0 0 1 2
H2 1 5 1 1 0 0
在客户入住酒店的所有夜晚中,我还想要一个周末的夜晚数。例如:
Hotel CliEspan Nights WdN CliFrench Night WdN CliPortug Night WdN
H1 3 8 5 0 0 0 1 2 2
H2 1 5 3 1 1 0 0 0 0
就目前而言,我需要包括周末。
clients[, nights := as.numeric(CL_DATASORTIDA - CL_DATAENTRADA)]
clients$CL_NACIONALITAT<-as.factor(as.character(clients$CL_NACIONALITAT))
clients$CL_NACIONALITAT<-substring(clients$CL_NACIONALITAT, 1,2)
clients$AT_REGISTRECOMERC<-substring(clients$AT_REGISTRECOMERC, 1,6)
# dcast to wide format
suma <- function(x)base::sum(x, na.rm=TRUE)
hotel <- dcast(clients, AT_REGISTRECOMERC ~ CL_NACIONALITAT, value.var = 'nights', fun.aggregate = list(suma, length))
names(hotel) <- gsub('nights_length', 'clients', names(new))
hotel<- data.frame(new)
inds <- which(colSums(hotel[, 90:177], na.rm=TRUE) < 20)
hotel$nights_other<-rowSums(hotel[, as.numeric(inds) + 1], na.rm=TRUE)
hotel$visitants_other<-rowSums(hotel[, as.numeric(inds) + 89], na.rm=TRUE)
hotel<-hotel[-c(inds+1, inds+89)]
【问题讨论】: