首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于某一条件的两种数据的比较

基于某一条件的两种数据的比较
EN

Stack Overflow用户
提问于 2016-07-29 01:56:48
回答 2查看 114关注 0票数 2

我有两个数据帧。df1由单个用户的参数的平均大小组成。df2包含用户相同参数的日均值。

我想计算每个df2$size > df1$size用于每个user的事件的天数。

代码语言:javascript
复制
df1 = read.table(text='user  size
AAL0706 29000
AAN0823 25000
AAV0450 30000', stringsAsFactors=FALSE, header=TRUE)


df2 = read.table(text='Date    user    size
      2010-01-04 AAL0706 31054
      2010-01-06 AAL0706 20703
      2010-01-08 AAL0706 39968
      2010-01-04 AAN0823 17892
      2010-01-06 AAN0823 37839
      2010-01-08 AAN0823 19649
      2010-01-04 AAV0450 35432
      2010-01-06 AAV0450 37839', stringsAsFactors=FALSE, header=TRUE)

预期产出如下:

代码语言:javascript
复制
   user  count
AAL0706      2
AAN0823      1
AAV0450      2

我尝试使用下面的命令来计算我的结果,但我意识到有些地方不对劲。

代码语言:javascript
复制
lapply(df1, function(y) { 
    ddply(df2$size, .(user), function(x) { 
        return(length(y$size(y$size > x$size))
    })
})

你能告诉我一种有效的方法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-29 01:59:21

我们可以从left_joindplyr进行分组,按“用户”获取逻辑索引的sum (size.x > size.y)。

代码语言:javascript
复制
library(dplyr)
left_join(df2, df1, by = "user") %>% 
            group_by(user) %>% 
            summarise(Count = sum(size.x > size.y))
#       user Count
#     <chr> <int>
#1 AAL0706     2
#2 AAN0823     1
#3 AAV0450     2

或者使用data.table

代码语言:javascript
复制
library(data.table)
setDT(df2)[df1, .(count = sum(size > i.size)),on = "user", by = .EACHI]
#      user count
#1: AAL0706     2
#2: AAN0823     1
#3: AAV0450     2
票数 1
EN

Stack Overflow用户

发布于 2016-07-29 07:07:32

使用data.table的一个稍微简单的解决方案是使用当前data.table开发版本v1.9.7中可用的新的non-equi联接功能。

代码语言:javascript
复制
require(data.table)
setDT(df2)[df1, .N, on=.(user, size > size), by=.EACHI]

根据提供给df1参数的条件,对df2的所有行进行匹配,即匹配user的确切值,并查找usersize较大的所有行。

一旦获得了匹配的行(对于每一行),将为每一行计算表达式.N (=匹配行的计数),因为by = .EACHI意味着这一点。它指示执行提供给第二个参数j的表达式,以便为每个i (第一个参数)运行。

有关开发版本这里,请参见安装说明。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38649349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档