我需要让累积客户的电话数量达到每天。
一个示例表是:
> data
dia cli llam elegidos cumllam
1 1-11 a 1 1 1
2 3-11 a 1 1 2
3 1-11 b 2 1 2
4 2-11 b 1 1 3
5 2-11 c 2 0 2
如您所见,客户端a没有在第2-11天调用,因此组合客户端a+d2-11不会出现在表中。如果我跑:
series<-data.frame(dcast(data, elegidos+dia~cumllam , length))
我得到:
> series
elegidos dia X1 X2 X3
1 0 2-11 0 1 0
2 1 1-11 1 1 0
3 1 2-11 0 0 1
4 1 3-11 0 1 0
但是,如果考虑到到第二天客户机被调用一次的次数,客户机a就应该出现,而不是因为我在前一个表中没有针对组合客户机a和第2-11天的行。
该表应如下所示:
elegidos dia X1 X2 X3
1 0 2-11 0 1 0
2 1 1-11 1 1 0
3 1 2-11 1 0 1
4 1 3-11 0 1 1
x1是接收的客户数量,直到并包括在行中的一天,确切地说是1次呼叫。
x2是接收的客户数量,直到并包括在行中的一天,确切地说是2个呼叫。
诸若此类。
其解释是:
是否有一种方法可以对每一天进行累积计数,而不必为每个客户天组合创建一行?
谢谢。
发布于 2014-11-05 15:39:58
试试这个:
dat1 <-data[!!data$elegidos,]
dat2 <- expand.grid(dia=sort(unique(dat1$dia)), cli=unique(dat1$cli))
dat3 <- merge(data,dat2, all=TRUE)
dat3N <- dat3[with(dat3, order( cli, dia)),]
library(zoo)
dat3N[,c('elegidos', 'cumllam')] <- lapply(dat3N[,
c('elegidos', 'cumllam')], na.locf)
library(reshape2)
dcast(dat3N, elegidos+dia~cumllam, length, value.var='cumllam')
# elegidos dia 1 2 3
#1 0 2-11 0 1 0
#2 1 1-11 1 1 0
#3 1 2-11 1 0 1
#4 1 3-11 0 1 1
更新
您也可以在data.table
中这样做。
library(data.table)
DT <- data.table(data)
setkey(DT, dia, cli)
DT1 <- rbind(DT[!!elegidos, CJ(dia=unique(dia),
cli=unique(cli))], DT[elegidos==0, 1:2, with=FALSE])
nm1 <- c('elegidos', 'cumllam')
#There is also a roll option but unfortunately I couldn't get it right here.
# So, I am using na.locf from zoo.
DT2 <- DT[DT1[order(cli, dia)]][,(nm1):= lapply(.SD, na.locf), .SDcols=nm1]
dcast.data.table(DT2, elegidos+dia~cumllam, length, value.var='cumllam')
# elegidos dia 1 2 3
#1: 0 2-11 0 1 0
#2: 1 1-11 1 1 0
#3: 1 2-11 1 0 1
#4: 1 3-11 0 1 1
数据
data <- structure(list(dia = c("1-11", "3-11", "1-11", "2-11", "2-11"
), cli = c("a", "a", "b", "b", "c"), llam = c(1L, 1L, 2L, 1L,
2L), elegidos = c(1L, 1L, 1L, 1L, 0L), cumllam = c(1L, 2L, 2L,
3L, 2L)), .Names = c("dia", "cli", "llam", "elegidos", "cumllam"
), class = "data.frame", row.names = c("1", "2", "3", "4", "5"))
https://stackoverflow.com/questions/26740088
复制相似问题