首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只匹配一次data.frames之间的日期和id

只匹配一次data.frames之间的日期和id
EN

Stack Overflow用户
提问于 2014-06-20 12:24:55
回答 2查看 69关注 0票数 0

有2个示例数据库,如下所示

代码语言:javascript
复制
id<-c(1,2,3,1,4,3,5)
date<-c("2011-1-1","2011-1-1","2011-2-2","2012-3-3","2012-4-4","2012-5-5","2012-6-6")
d<-data.frame(cbind(id,date))
colnames(d)<-c("id","date")
d$w<-do.call(paste,c(d[c("id","date")],sep=" "))

id<-c(7,8,9,10,7,10,8,10,11,12)
date<-c("2011-1-1","2011-1-1","2011-2-2","2012-3-3","2012-3-3","2012-4-4","2012-4-4","2012-5-5","2012-6-6","2012-6-6")
contr<-data.frame(cbind(id,date))
colnames(contr)<-c("id","date")
contr$w<-do.call(paste,c(contr[c("id","date")],sep=" "))

考虑在这两个数据集中重复id和日期,但是d$id都不同于contr$id,并且所有contr$date在% d$date中都是%,我想要的是y,它是一个向量,对于每个在%d$date中有一个contr$date%的d$id包含一个contr$w。

我尝试过这种方法,但我相信肯定有一种更简单的方法,即simpler=better方法。

代码语言:javascript
复制
y<-0
for(i in length(levels(factor(d$w)))){
   for(j in length(levels(factor(contr$w)))){
     z<-ifelse(d$date[i]==contr$date[j],contr$w[j],NA)
     y<-c(y,z)
     y<-subset(y,!is.na(y))
  }
}

有人能帮忙吗?非常感谢,马可

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-30 21:14:30

实际上,我现在已经编写了一个循环来完成这个任务(之前的答案没有工作,因为在d中有些情况下没有匹配的日期)。它非常慢,但它完全符合我的要求。

代码语言:javascript
复制
for(i in 1:length(d$rownames)){
   if(TRUE%in%levels(factor(contr$w%in%d$w[i]))==TRUE){
       control.2$rownames[i]<-sample(contr$rownames[ctr$w==d$w[i]],1)
       contr<-contr[!contr$rownames%in%control.2$rownames[i],]
}else{
       z<-contr[contr$practice==d$practice[i],]
       z$tempo<-abs(difftime(z$date,d$date[i],units="days"))
       z<-z[!is.na(z$tempo),]
       z<-z[z$tempo==min(z$tempo),]
       control.2$rownames[i]<-sample(z$rownames,1)
       contr<-contr[!contr$rownames%in%control.2$rownames[i],]
  }
}

我确信这不是最好的代码,但它有效。第二次查看说明了没有匹配日期的情况下的少数情况,因此我选择了最接近日期的sampled()一个。如果你能想出一个更快的版本,那就太好了。我的数据集是关于d=~5K行和contr=~2.5百万行的,运行大约需要2个小时。痛苦但值得等待!

票数 0
EN

Stack Overflow用户

发布于 2014-06-23 10:12:11

这做了我想做的,也许我的解释不够清楚。我只想给每个id一个随机的日期(然后我可以创建w列)。我使用了另一个问题的解决方案来解决这个问题:

Random row selection in R

不管怎么说,还是有很多汉克斯在努力!马可

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

https://stackoverflow.com/questions/24327229

复制
相关文章

相似问题

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