首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >r-整形表按3个变量分组(2行)

r-整形表按3个变量分组(2行)
EN

Stack Overflow用户
提问于 2014-11-04 15:02:05
回答 2查看 124关注 0票数 1

我需要将下表修改为宽格式:

代码语言:javascript
运行
复制
> 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

我需要列中的天数和列中的累积量以及客户端的数量作为值。

我写道:

代码语言:javascript
运行
复制
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'))

我得到了:

代码语言:javascript
运行
复制
> series
   dia X1 X2 X3
1 1-11  1  1  0
2 2-11  1  0  2

但我需要把它分成“哀悼会”栏。我的桌子应该是:

代码语言:javascript
运行
复制
elegidos    dia    X1   X2  X3
0           2-11    1   0   0
1           1-11    1   1   0
1           2-11    0   0   2

我试过:

代码语言:javascript
运行
复制
  data.frame(dcast(data, c(elegidos,dia)~cumllam ,
              fun.aggregate=my.f,  value.var='cli'))

但我得到了错误的结果:

代码语言:javascript
运行
复制
  c.elegidos..dia. X1 X2 X3
1                0  1  0  0
2                1  2  2  2
3                2  1  0  2

我可以过滤表1,然后运行dcast,就像在第一段代码和rbind中一样,但我确信有一种方法可以在一步内完成。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-04 15:19:54

如果你的目标是你问题中最后一个矩阵的第二个,你可以用:

代码语言:javascript
运行
复制
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
票数 2
EN

Stack Overflow用户

发布于 2014-11-04 15:31:35

使用R基:

代码语言:javascript
运行
复制
> 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:

代码语言:javascript
运行
复制
> 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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26738375

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档