我有 data.frame,我想将我的列分组到 dplyr 和 data.table 包中。
这是我的 data.frame:
auto &val4 = *m.try_emplace(0, "try_emplace").first;
我想使用 length 函数进行分组并得到如下结果:
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
我做到了
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"]))
结果不一样。
我也尝试在 data.table 中执行此操作,但出现错误。
也许还有一些其他函数类似于 aggregate() 中的 length 函数?
答案 0 :(得分:4)
我们可以在n()
中使用dplyr
library(dplyr)
new <- df %>%
group_by(OwnerUserId) %>%
summarise(AnswersNumber = n())
和.N
中的data.table
library(data.table)
setDT(df)[, .(AnswersNumber = .N), OwnerUserId]
df[, "OwnerUserId"]
返回整个列,打破了用 'OwnerUserId' 创建的分组,因此我们得到整个列的 length
而不是组的长度。我们也可以改用 summarise(AnswerNumber = length(OwnerUserId))
。但是,n()
专门用于此