簡體   English   中英

R中基於數據幀列匹配的高效數據子集

[英]efficiently data subset based on data frame columns matching in R

我有兩個數據幀,例如df1和df2。 現在,我想基於df1和df2之間多列的匹配對df2進行子集設置。

例如

df1                                   
   A   B  #column names, rows in df1 are unique, A1,B1 etc are characters                  
   A1  B1                                
   A2  B2 
   ......                               



  df2  
  C     D     E   F    G  
  A1    B1    E1  F1   G1
  A2    B2    E2  .......  
  A1    B2    E3  .......  
  A1    B1    E4  .......  
  A2    B1    E5  .......  

在這里,我想將df1中的A和B列與df2中的C和D列進行匹配,並構造一個新的數據幀df3,其中df3的每一行都存儲發生匹配的df2的行索引。 對於我的例子,應該是

df3
c(1,4)
c(2)

本來我想粘貼字符並進行字符串比較以進行匹配,但是我懷疑這不是執行此操作的有效方法,還有更好的主意嗎?

這是否滿足您的需求?

df1 <- data.frame(A = c("A1", "A2"),
                  B = c("B1","B2"))

df2 <- data.frame(C = c("A1", "A2", "A1", "A1", "A2"),
                  D = c("B1", "B2", "B2", "B1", "B1"),
                  E = rnorm(5))

df2$row <- 1:nrow(df2)
df2
m <- merge(df1, df2, by.x = c("A","B"),
           by.y = c("C","D"),
           all.x = T, sort = FALSE)
res <- aggregate(row ~ A +B , data=m, paste, sep ="", collapse = ",")
sapply(res, class)

如果您要在生產中處理大數據,我認為我的答案不是最有效的方法。 如果我只是編寫原型以查看快速答案,我將合並它們。

df1<-data.frame(A=c("A1","A2"),B=c("B1","B2"))
df2<-data.frame(C=c("A1","A2","A1","A1","A2"),D=c("B1","B2","B2","B1","B1"))
names(df1)<-c("C","D")
df1$is_df1<-"Y"
df2$rownumber<-c(1:nrow(df2))
z<-merge(df2,df1,all.x=TRUE)
do.call(rbind,lapply(split(z,paste(z$C,z$D)),function(x)paste(x$rownumber,collapse=",")))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM