像R中的数字操纵一样转动

时间:2014-03-24 11:11:25

标签: r

我试图在聚合中嵌套两个子集数据。但它返回不同长度的数据,因此无法计算。 我有什么选择?

newfile<- aggregate(cbind(subset(IVA,IVA$IVR.Agent =="Agent"),subset(IVA,IVA$IVR.Agent=="IVR")) ~ IVA$OrderNo, FUN = length, rm.action = TRUE)

以下是我收到的错误

Error in data.frame(..., check.names = FALSE) : 
  arguments imply differing number of rows: 25039, 4585

我正在尝试创建一个数据透视表,它将在单独的列中显示代理计数和IVR计数,就像在Excel中一样,如果对于特定的顺序没有IVR,则显示null,否则计数。

DataSet看起来像这样

OrderNo IVR/Agent
    A1  IVR
    B1  Agent
    A2  Agent
    B2  IVR
    A3  Agent
    B3  Agent
    A4  Agent
    B4  Agent
    A5  IVR
    B5  Agent

Pivot

2 个答案:

答案 0 :(得分:2)

如果您的数据被称为myData,则以下内容似乎就是您所需要的。

table(myData)

# which yields

       IVR.Agent
OrderNo Agent IVR
     A1     0   1
     A2     1   0
     A3     1   0
     A4     1   0
     A5     0   1
     B1     1   0
     B2     0   1
     B3     1   0
     B4     1   0
     B5     1   0

如果需要,只需将这些列添加到总计中。

gt <- rowSums( table(s) )

tab <- table(s)
gt <- tab[,1] + tab[,2]

答案 1 :(得分:1)

因此,您想查看reshape2包和cast功能。看看下面的代码:

# install.packages('reshape2') # only run if you haven't downloaded before
library(reshape2)

datCast <- dcast(dat, OrderNo ~ IVR.Agent, fun.aggregate = length, margins = T)

datCast
   OrderNo Agent IVR (all)
1       A1     0   1     1
2       A2     1   0     1
3       A3     1   0     1
4       A4     1   0     1
5       A5     0   1     1
6       B1     1   0     1
7       B2     0   1     1
8       B3     1   0     1
9       B4     1   0     1
10      B5     1   0     1
11   (all)     7   3    10