R 中多个变量的分组

2024-03-01

我是一名强大的 excel 数据透视表用户,正在强迫自己学习 R。我确切地知道如何在 excel 中进行此分析,但无法找出在 R 中进行编码的正确方法。

我试图按两个不同的变量对用户数据进行分组,同时将变量分组到范围(或箱)中,然后汇总其他变量。

数据如下:

userid  visits  posts   revenue
1       25      0       25
2       2       2       0
3       86      7       8
4       128     24      94
5       30      5       18
…       …       …        …
280000  80      10      100
280001  42      4       25
280002  31      8       17

这是我试图让输出看起来像这样:

VisitRange  PostRange   # of Users  Total Revenue   Average Revenue
0           0           X            Y              Z
1-10        0           X   Y   Z
11-20       0           X   Y   Z
21-30       0           X   Y   Z
31-40       0           X   Y   Z
41-50       0           X   Y   Z
> 50        0           X   Y   Z
0           1-10        X            Y              Z
1-10        1-10        X            Y              Z
11-20       1-10        X            Y              Z
21-30       1-10        X            Y              Z
31-40       1-10        X            Y              Z
41-50       1-10        X            Y              Z
> 50        1-10        X            Y              Z

想要按访问量和发帖数按 10 分组到一定级别,然后将高于 50 的任何内容分组为“> 51”

我已经将 tapply 和 ddply 视为实现此目的的方法,但我认为它们不会按照我期望的方式工作,但我可能是错的。

最后,我知道我可以在 SQL 中使用 if/then 语句来确定访问范围和帖子范围(例如 - 如果访问次数在 1 到 10 之间,则为“1-10”),然后只需分组访问范围和发布范围,但我的目标是开始强迫自己使用 R。也许 R 在这里不是正确的工具,但我认为它是......

所有帮助将不胜感激。提前致谢。


成语中的plyr包装和ddply特别是,它与 Excel 中的数据透视表非常相似。

在您的示例中,您唯一需要做的就是cut在传递到之前,将变量分组到所需的中断中ddply。这是一个例子:

首先,创建一些示例数据:

set.seed(1)
dat <- data.frame(
  userid = 1:500,
  visits =sample(0:50, 500, replace=TRUE),
  posts = sample(0:50, 500, replace=TRUE),
  revenue = sample(1:100, replace=TRUE)
  )

现在,使用cut将分组变量划分为所需的范围:

dat$PostRange <- cut(dat$posts, breaks=seq(0, 50, 10), include.lowest=TRUE)
dat$VisitRange <- cut(dat$visits, breaks=seq(0, 50, 10), include.lowest=TRUE)

最后,使用ddply with summarise:

library(plyr)
ddply(dat, .(VisitRange, PostRange), 
      summarise, 
      Users=length(userid), 
      `Total Revenue`=sum(revenue), 
      `Average Revenue`=mean(revenue))

结果:

   VisitRange PostRange Users Total Revenue Average Revenue
1      [0,10]    [0,10]    23          1318        57.30435
2      [0,10]   (10,20]    23          1136        49.39130
3      [0,10]   (20,30]    28          1499        53.53571
4      [0,10]   (30,40]    20           923        46.15000
5      [0,10]   (40,50]    14           826        59.00000
6     (10,20]    [0,10]    23          1227        53.34783
7     (10,20]   (10,20]    17           642        37.76471
8     (10,20]   (20,30]    20           888        44.40000
9     (10,20]   (30,40]    15           622        41.46667
10    (10,20]   (40,50]    21           968        46.09524
11    (20,30]    [0,10]    23          1226        53.30435
12    (20,30]   (10,20]    19          1021        53.73684
13    (20,30]   (20,30]    23          1380        60.00000
14    (20,30]   (30,40]     8           313        39.12500
15    (20,30]   (40,50]    19           710        37.36842
16    (30,40]    [0,10]    18           782        43.44444
17    (30,40]   (10,20]    25          1308        52.32000
18    (30,40]   (20,30]    14           553        39.50000
19    (30,40]   (30,40]    26          1131        43.50000
20    (30,40]   (40,50]    20          1295        64.75000
21    (40,50]    [0,10]    20           958        47.90000
22    (40,50]   (10,20]    21          1168        55.61905
23    (40,50]   (20,30]    20          1118        55.90000
24    (40,50]   (30,40]    20          1009        50.45000
25    (40,50]   (40,50]    20           934        46.70000
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R 中多个变量的分组 的相关文章

随机推荐