繁体   English   中英

如何检查向量的所有元素是否都在列表中,添加一列,其中包含发生这种情况的列表名称(在 R 中)

[英]How to check if all elements of a vector are in a list, adding a column with the name of the list where this occurs (in R)

我有一个带有“N”个数据框的列表(所有的固定行和列的数量都相同,有些值可能是 NA),如下所示:

   A1<-c(1:5)
   A2<-c(3)
   A3<-c(1:2)
   A4<-c(1:3)
   A5<-as.integer(c(NA))
   
   length(A1)<-5
   length(A2)<-5
   length(A3)<-5
   length(A4)<-5
   length(A5)<-5
   
   DF1 <- data.frame(A1,A2,A3,A4,A5)
   
   B1<-c(4:8)
   B2<-c(5)
   B3<-c(1:2)
   B4<-c(8:12)
   B5<-c(1)
   
   length(B1)<-5
   length(B2)<-5
   length(B3)<-5
   length(B4)<-5
   length(B5)<-5
   
   DF2 <- data.frame(B1,B2,B3,B4,B5)
   
   LIST <- list(DF1,DF2)
   names(LIST) <- c("DF1","DF2")

DF1
  A1 A2 A3 A4 A5
1  1  3  1  1 NA
2  2 NA  2  2 NA
3  3 NA NA  3 NA
4  4 NA NA NA NA
5  5 NA NA NA NA

DF2
  B1 B2 B3 B4 B5
1  4  5  1  8  1
2  5 NA  2  9 NA
3  6 NA NA 10 NA
4  7 NA NA 11 NA
5  8 NA NA 12 NA

我有另一个包含 N 行和 5 列的数据框,对于每一行,我想检查每列的元素是否包含在列表对象的相应列中。 如果包含所有元素,我想添加一列,其中包含发生这种情况的数据框的名称。

我想检查的数据框:

   row1 <- c(4,3,1,3,NA)
   row2 <- c(5,5,1,10,1)
   row3 <- c(5,2,2,3,NA)
   
   DataBase <- data.frame(rbind(row1,row2,row3))

     X1 X2 X3 X4 X5
row1  4  3  1  3 NA
row2  5  5  1 10  1
row3  5  2  2  3 NA

所以对于row1,我想检查列X1(4)的元素是否包含在列A1或B1中,列X2(3)的元素是否包含在列A2或B2中等等。 所以预期的结果是:

     X1 X2 X3 X4 X5 Result
row1  4  3  1  3 NA DF1
row2  5  5  1 10  1 DF2
row3  5  2  2  3 NA No_Match

我正在尝试将 someting 与for() 、 multiples if()sapply(LIST[[i]][[j]], `%in%`, DataBase[j]))使用,但没有成功。

您可以使用带有lapplyMap函数来检查两个 data.frames 中每一列中的元素

DataBase$Result <- sapply(1:nrow(DataBase) ,
\(i) ifelse(all(unlist(Map(`%in%` , DataBase[i,] ,
lapply(DF1 , \(x) x)))) , "DF1", ifelse(all(unlist(Map(`%in%` , DataBase[i,] ,
lapply(DF2 , \(x) x)))) , "DF2" , "No_Match")))
  • 输出
     X1 X2 X3 X4 X5   Result
row1  4  3  1  3 NA      DF1
row2  5  5  1 10  1      DF2
row3  5  2  2  3 NA No_Match

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM