我试图在 data.frames 列表的特定列中找到所有匹配值。但是,我不断收到 character(0)
的返回值。
我试过以下方法: 简单子(monad)集(非常耗时)-> 例如数据[[i]][[i]] lapply w/Reduce 和相交(如所见 here
LocA<-data.frame(obs.date=c("2018-01-10","2018-01-14","2018-01-20),
obs.count=c(2,0,1))
LocB<-data.frame(obs.date=c("2018-01-09","2018-01-14","2018-01-20),
obs.count=c(0,3,5))
LocC<-data.frame(obs.date=c("2018-01-12","2018-01-14","2018-01-19"),
obs.count=c(2,0,1))
LocD<-data.frame(obs.date=c("2018-01-11","2018-01-16","2018-01-21"),
obs.count=c(2,0,1))
dfList<-list(LocA,LocB,LocC,LocD)
##List of all dates
lapply(dfList,'[[',1)
[1]"2018-01-10" "2018-01-14" "2018-01-20" "2018-01-09"...
尝试(失败)
>Reduce(intersect,lapply(dfList,'[[',1))
character (0)
我希望此函数的输出是标识共享同一日期的 data.frames 的输出。
*如果有人知道如何识别共享日期并将其变异为单个数据框,则额外的微笑,其中..Col1 = 数据框名称,Col2=obs.date,Col3 = obs.count
最佳答案
您可以先合并所有数据框,这样您就只有一个:
a <- Reduce(function(x, y) merge(x, y, all = TRUE), dfList)
或者你可以像这样合并它们:
a <-rbind(LocA,LocB,LocC,LocD)
之后,您可以提取所有重复项:
b <- a[duplicated(a$obs.date), ]
或者如果您想保留所有唯一的并保留重复的:
c <- a[!duplicated(a$obs.date), ]
关于R:如何将数据框列表与特定列相交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57288667/