我刚接触R,但是我找不到解决问题的正确方法。
我有两个df:一个在会话级别,一个在客户端级别。在客户端级别df中,我想对客户端在会话df中完成的会话数求和。
df看起来像:
df1 df2
Sessionid Client id Clientid
1 1 1
2 1 2
3 2
4 2
5 2
我想要输出:
df1 df2
Sessionid Client id Clientid Number_of_sessions
1 1 1 2
2 1 2 3
3 2
4 2
5 2
答案 0 :(得分:2)
一种选择是使用dplyr
库:
df %>%
group_by(Clientid) %>%
summarise(Number_of_sessions = n())
# Clientid Number_of_sessions
# <int> <int>
# 1 1 2
# 2 2 3
或
aggregate(Sessionid ~ Clientid, df, length)
返回相同的内容。
数据:
structure(list(Sessionid = 1:5, Clientid = c(1L, 1L, 2L, 2L,
2L)), class = "data.frame", row.names = c(NA, -5L)) -> df
答案 1 :(得分:1)
您可以尝试
library(dplyr)
count(group_by(df1, `Client id`), name = "Number_of_sessions")
#> # A tibble: 2 x 2
#> # Groups: Client id [2]
#> `Client id` Number_of_sessions
#> <int> <int>
#> 1 1 2
#> 2 2 3
答案 2 :(得分:1)
一个简单的基础R解决方案就是
df2 <- as.data.frame(table(df1$Clientid))
names(df2) <- c("Clientid", "Number_of_sessions")
输出
# Clientid Number_of_sessions
# 1 1 2
# 2 2 3