r - 使用 dplyr 和 data.table 包中的 length 函数聚合

标签 r dplyr data.table aggregate

我有 data.frame,我想将其分组到 dplyr 和 data.table 包中。

这是我的数据框:

df <- data.frame(OwnerUserId = sample(c(-1, 2:10), size = 10),
                  TypeOfId = sample(c(1,2), size = 10, replace = T))

df

## OwnerUserId TypeOfId
## 1           10        1
## 2            6        2
## 3            7        2
## 4            3        2
## 5            2        2
## 6            9        2
## 7           -1        2
## 8            5        1
## 9            8        2
## 10           4        1

我想使用 length 函数进行分组并得到如下结果:

new <- aggregate(x = df[, "OwnerUserId"],
                 by = df["OwnerUserId"], 
                 FUN = length)

##    OwnerUserId x
## 1           -1 1
## 2            2 1
## 3            3 1
## 4            4 1
## 5            5 1
## 6            6 1
## 7            7 1
## 8            8 1
## 9            9 1
## 10          10 1

我做到了

new <- df %>% group_by(OwnerUserId) %>% summarise(AnswersNumber = length(df[, "OwnerUserId"]))

我得到了

##    OwnerUserId AnswersNumber
##          <dbl>         <int>
##  1          -1            10
##  2           2            10
##  3           3            10
##  4           4            10
##  5           5            10
##  6           6            10
##  7           7            10
##  8           8            10
##  9           9            10
## 10          10            10

结果并不相同。

我也尝试在 data.table 中执行此操作,但出现错误。

也许还有一些其他函数类似于aggregate()中的length函数?

最佳答案

我们可以在dplyr中使用n()

library(dplyr)
new <- df %>%
    group_by(OwnerUserId) %>% 
    summarise(AnswersNumber = n())
data.table 中的

.N

library(data.table)
setDT(df)[, .(AnswersNumber = .N), OwnerUserId]

df[, "OwnerUserId"] 返回整个列,打破使用“OwnerUserId”创建的分组,因此我们得到整个列的长度,而不是组的长度。我们也可以使用 summarise(AnswerNumber = length(OwnerUserId)) 。但是,n() 专门用于此

关于r - 使用 dplyr 和 data.table 包中的 length 函数聚合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67450809/

相关文章:

r - 当函数返回一个 data.table 时是否进行了复制?

r - 从维基百科表格中抓取网址

r - R,如果下标错误超出范围

r - 如何将多列传递给 dplyr::summarize 中的函数

r - data.table 非对等连接中的意外行为

r - 在data.table中进行多次转换时如何避免相同的列名?

r - 库错误(reshape2): there is no package called ‘reshape2’

r - 垂直组合多个条形图

python - 从 r 过渡到 Python - pandas 中类似 dplyr 的操作

根据子图中的点重新排列facet_wrap图