【问题标题】:How to group by different columns and find the percentage based on one column?如何按不同列分组并根据一列查找百分比?
【发布时间】:2015-12-01 21:18:58
【问题描述】:

我想将下面的数据表按var1var2分组,然后在var2中求百分比:

data <- as.data.table(list(var1 = c("x1","x1","x2","x1","x2"), 
                           var2 = c("y1","y1","y1","y2","y2"))) 

data[, .(count = .N), by=.(var1, var2)]

#    var1 var2 count
#1:   x1   y1     2
#2:   x2   y1     1
#3:   x1   y2     1
#4:   x2   y2     1

这是我感兴趣的结果:

#    var1 var2 count  ratio in var2
#1:   x1   y1     2         0.66
#2:   x2   y1     1         0.33
#3:   x1   y2     1         0.5
#4:   x2   y2     1         0.5

如何更改代码来实现这一点?

【问题讨论】:

  • 数据[, .N, by=.(var1, var2)][, ratio:=N/sum(N), by=var1]
  • 看来您对 data.table 的了解已经足够自己解决这个问题了。你试过了吗?
  • 我不知道为什么我错过了,谢谢。

标签: r data.table grouping


【解决方案1】:

这应该会给你你想要的:

data <- data[, .N, by = .(var1, var2)][, ratio:=N/sum(N), by = var2]

导致:

> data
   var1 var2 N     ratio
1:   x1   y1 2 0.6666667
2:   x2   y1 1 0.3333333
3:   x1   y2 1 0.5000000
4:   x2   y2 1 0.5000000

【讨论】:

  • 这不会在data 中创建新列,顺便说一句,因为在到达:= 之前您有一个][。有data[, rat := {bigN=.N; copy(.SD)[, x := .N/bigN, by=var2]$x}, by=var1],不过好像不是什么好办法。
  • 还有data %&gt;% group_by(var2, var1) %&gt;% summarise(n = n()) %&gt;% mutate(n / sum(n))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-03
  • 1970-01-01
  • 2013-08-21
  • 2019-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多