R中的条件过滤和汇总

岗楼

我最近从STATA + Excel过渡到R。所以,如果有人可以帮助我编写高效的代码,我将不胜感激。在发布SO之前,我已经尽力研究了答案。

这是我的数据的样子:

mydata<-data.frame(sassign$buyer,sassign$purch,sassign$total_)
str(mydata)
'data.frame':   50000 obs. of  3 variables:
 $ sassign.buyer : Factor w/ 2 levels "no","yes": 1 1 1 1 1 2 1 1 2 1 ...
 $ sassign.purch : num  10 3 2 1 1 1 1 11 11 1 ...
 $ sassign.total_: num  357 138 172 272 149 113 15 238 418 123 ...
head(mydata)
  sassign.buyer sassign.purch sassign.total_
1            no            10            357
2            no             3            138
3            no             2            172
4            no             1            272
5            no             1            149
6           yes             1            113

我的目标是找到购买次数大于1的平均购买者数量。

所以,这就是我所做的:

方法1:长方法

library(psych)
check<-as.numeric(mydata$sassign.buyer)-1
myd<-cbind(mydata,check)
abcd<-psych::describe(myd[myd$sassign.purch>1,])
abcd$mean[4]

我得到的输出是:0.1031536697,这是正确的。

@Sathish:这是支票的样子:

head(check)
0 0 0 0 0 1

这确实解决了我的目的。

这种方法的优点:很简单,通常是初学者。缺点:太多了-我需要一个额外的变量(检查)。另外,我不喜欢这种方法-它太笨拙了。

补充问题:我意识到默认情况下,尽管设置了选项(数字= 10),但函数显示的精度更高。例如,这是我从运行中得到的结果:

psych::describe(myd[myd$sassign.purch>1,])


               vars     n   mean     sd median trimmed    mad min max range skew
sassign.buyer*    1 34880   1.10   0.30      1    1.00   0.00   1   2     1 2.61
sassign.purch     2 34880   5.14   3.48      4    4.73   2.97   2  12    10 0.65
sassign.total_    3 34880 227.40 101.12    228  226.13 112.68  30 479   449 0.09
check             4 34880   0.10   0.30      0    0.00   0.00   0   1     1 2.61
               kurtosis   se
sassign.buyer*     4.81 0.00
sassign.purch     -1.05 0.02
sassign.total_    -0.72 0.54
check              4.81 0.00

只是我跑的时候

abcd$mean[4]

我得到0.1031536697

方法2:使用dplyr我尝试了管道和函数调用,但最终我放弃了。

方法2 | 尝试1:心理:: describe(dplyr :: filter(mydata,mydata $ sassign.purch> 1)[,dplyr :: mutate(as.numeric(mydata $ sassign.buyer)-1)]))

输出:

Error in UseMethod("mutate_") : 
  no applicable method for 'mutate_' applied to an object of class "c('double', 'numeric')"

方法2 | 尝试2:使用管道:

mydata %>% mutate(newcol = as.numeric(sassign.buyer)-1) %>% dplyr::filter(sassign.purch>1) %>% summarise(meanpurch = mean(newcol))

这确实奏效了,我的意思是平均购买= 0.1031537。但是,我仍然不确定尝试1。

有什么想法为什么不起作用?

沙沙语

数据:

> dt
# sassign.buyer sassign.purch sassign.total_
# 1            no            10            357
# 2            no             3            138
# 3            no             2            172
# 4            no             1            272
# 5            no             1            149
# 6           yes             1            113

购买数量大于1的买家数量

library(dplyr)

dt %>% 
  group_by(sassign.buyer) %>% 
  filter(sassign.purch > 1) 

# 
# Source: local data frame [3 x 3]
# Groups: sassign.buyer [1]
# 
# sassign.buyer sassign.purch sassign.total_
# (chr)         (int)          (int)
# 1            no            10            357
# 2            no             3            138
# 3            no             2            172

购买量大于1的平均购买者数量

dt %>% 
  group_by(sassign.buyer) %>% 
  filter(sassign.purch > 1) %>% 
  summarise(avg_no_buyers_gt_1 = length(sassign.buyer)/ nrow(dt))

# Source: local data frame [1 x 2]
# 
#       sassign.buyer avg_no_buyers_gt_1
#         (chr)              (dbl)
# 1            no             0.5

如果不需要买家分组,

dt %>%
  filter(sassign.purch > 1) %>% 
  summarise(avg_no_buyers_gt_1 = length(sassign.buyer)/ nrow(dt))

#   avg_no_buyers_gt_1
# 1          0.7777778

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

R中的分组依据和条件汇总

来自分类Dev

[R]中的条件分组和汇总数据帧

来自分类Dev

Postgres汇总条件和

来自分类Dev

在R中自动分组和汇总

来自分类Dev

R中的计数和汇总日期

来自分类Dev

汇总(和相乘)行中的行-R

来自分类Dev

如何在dplyr r中进行条件分组和汇总

来自分类Dev

R中的条件和

来自分类Dev

R:基于dyplr中的多个条件进行汇总

来自分类Dev

汇总DataTables中的过滤列

来自分类Dev

通过R中的多个条件进行过滤

来自分类Dev

在R中按个案条件过滤

来自分类Dev

按 R 中多列的条件过滤

来自分类Dev

使用r汇总以另一列中的条件为条件的行中的值

来自分类Dev

邮件汇总中的骆驼条件

来自分类Dev

R中的数字和分类数据汇总表

来自分类Dev

R中group_by的排序,变异和汇总

来自分类Dev

在R中迭代条件和

来自分类Dev

R中的汇总NA

来自分类Dev

汇总R中的数据

来自分类Dev

汇总R中的数据

来自分类Dev

R中的汇总NA

来自分类Dev

如何通过索引和条件过滤R data.table

来自分类Dev

R滤镜| 根据条件进行过滤和分组

来自分类Dev

R按POSIXct时间和条件过滤/选择数据

来自分类Dev

根据其他列中的条件汇总列中的唯一值(如果对列进行了过滤)

来自分类Dev

在多重条件测试中过滤R中的行

来自分类Dev

如何自动汇总Excel中的过滤数据?

来自分类Dev

汇总Google图表中的分组/过滤数据