[英]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]))
使用,但没有成功。
您可以使用带有lapply
的Map
函数来检查两个 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.