如何根据r中两个df中的条件求和另一个df中的值?

时间:2020-05-24 08:20:15

标签: r sum

我刚接触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    

3 个答案:

答案 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
相关问题