首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取与另一个变量的汇总计数的唯一值组合

问获取与另一个变量的汇总计数的唯一值组合
EN

Stack Overflow用户
提问于 2012-11-17 19:38:47
回答 2查看 1.5K关注 0票数 2

我有一个数据帧,看起来像这样:

代码语言:javascript
复制
pred1 pred2 pred3 exp
a     b     c     0
a     d     c     0
a     b     c     1

我想要做的是首先获得pred1-3的所有唯一组合,将它们写到一个附加表中,为每个组合的频率添加一列,并为每个组合添加另一列,该列给出了exp的值1的比例(只能是0或1)。如下所示:

代码语言:javascript
复制
pred1 pred2 pred3 freq exp_prop
a     b     c     2    0.5
a     d     c     1    0

事实证明,使用plyr的前三步非常简单:

代码语言:javascript
复制
ddply(df, .(pred1, pred2, pred3), summarise, freq=length(exp))

或更短

代码语言:javascript
复制
count(df[,c(pred1, pred2, pred3)])

但我就是想不出怎么才能得到exp的比例。

EN

回答 2

Stack Overflow用户

发布于 2012-11-17 21:13:29

您就快完成了。只需在ddply命令中添加exp_prop = mean(exp):

代码语言:javascript
复制
ddply(df, .(pred1, pred2, pred3), summarise,
      freq = length(exp), exp_prop = mean(exp))

  pred1 pred2 pred3 freq exp_prop
1     a     b     c    2      0.5
2     a     d     c    1      0.0
票数 1
EN

Stack Overflow用户

发布于 2012-11-17 19:53:37

代码语言:javascript
复制
# read in your data
x <- 
read.table(text="pred1 pred2 pred3 exp
a     b     c     0
a     d     c     0
a     b     c     1" , h = T)

library(sqldf)
sqldf( "select pred1, pred2, pred3, count(*) as numtimes, avg( exp ) as prop from x group by pred1, pred2, pred3" )

###### alternative:

# write all the column names according to some pattern
cols <- paste0("pred" , 1:3 , collapse = "," )

# save your data frame to another object
y <-
    sqldf( 
        paste( 
            "select" , 
            cols  , 
            " , count(*) as numtimes, avg( exp ) as prop from x group by" , 
            cols 
        ) 
    )

# print to screen
y
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13430203

复制
相关文章

相似问题

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