R-由3个变量(行中2个)分组的重塑表格 [英] r- reshape table grouped by 3 variables (2 in rows)

查看:12
本文介绍了R-由3个变量(行中2个)分组的重塑表格的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要重塑以宽格式显示下表:

> 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"列分开。我的表格应该是:

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

我可以首先筛选表,然后运行dcast,就像第一个代码和rind中那样,但我相信有一种方法可以一步到位。

推荐答案

如果您的目标是问题中倒数第二个矩阵,则只需使用:

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

这篇关于R-由3个变量(行中2个)分组的重塑表格的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆