我需要将下表修改为宽格式:
> data
dia cli llam elegidos cumllam
1 1-11 a 1 1 1
2 2-11 a 2 1 3
3 1-11 b 2 1 2
4 2-11 b 1 1 3
5 2-11 c 1 0 1
我需要列中的天数和列中的累积量以及客户端的数量作为值。
我写道:
library(reshape2)
my.f <- function (v) {if (length(v) == 0) 0 else length(v)}
series<-data.frame(dcast(data, dia~cumllam ,
fun.aggregate=my.f, value.var='cli'))
我得到了:
> series
dia X1 X2 X3
1 1-11 1 1 0
2 2-11 1 0 2
但我需要把它分成“哀悼会”栏。我的桌子应该是:
elegidos dia X1 X2 X3
0 2-11 1 0 0
1 1-11 1 1 0
1 2-11 0 0 2
我试过:
data.frame(dcast(data, c(elegidos,dia)~cumllam ,
fun.aggregate=my.f, value.var='cli'))
但我得到了错误的结果:
c.elegidos..dia. X1 X2 X3
1 0 1 0 0
2 1 2 2 2
3 2 1 0 2
我可以过滤表1,然后运行dcast,就像在第一段代码和rbind中一样,但我确信有一种方法可以在一步内完成。
发布于 2014-11-04 15:19:54
如果你的目标是你问题中最后一个矩阵的第二个,你可以用:
df <- read.table(header=T, text = ' dia cli llam elegidos cumllam
1-11 a 1 1 1
2-11 a 2 1 3
1-11 b 2 1 2
2-11 b 1 1 3
2-11 c 1 0 1
')
require(reshape2)
dcast(df, formula=elegidos + dia ~ cumllam, length)
elegidos dia 1 2 3
1 0 2-11 1 0 0
2 1 1-11 1 1 0
3 1 2-11 0 0 2
发布于 2014-11-04 15:31:35
使用R基:
> reshape(ddf[,-2], idvar=c('dia','elegidos'), timevar='cumllam', direction='wide')
dia elegidos llam.1 llam.3 llam.2
1 1-11 1 1 NA 2
2 2-11 1 NA 2 NA
5 2-11 0 1 NA NA
将NA替换为0:
> rr = reshape(ddf[,-2], idvar=c('dia','elegidos'), timevar='cumllam', direction='wide')
> rr[is.na(rr)] <- 0
> rr
dia elegidos llam.1 llam.3 llam.2
1 1-11 1 1 0 2
2 2-11 1 0 2 0
5 2-11 0 1 0 0
https://stackoverflow.com/questions/26738375
复制相似问题