找到两个数据之间的相似元素

时间:2016-02-24 18:50:19

标签: r

我问了一个问题,之前很复杂,我没有得到任何帮助。所以我试着简化问题并输入输出。

我尝试了很多方法,但没有一个方法可以解决,例如,我将一些

排序 #1
for(i in ncol(mydata)){
    corsA  = grep(colnames(mydata)[i] , colnames(mysecond))
    mydata[,corsA]%in%mysecond[,i]}
# here if I get true then means they have match 
## 2
are.cols.identical <- function(col1, col2) identical(mydata[,col1], mysecond[,col2])
res <- outer(colnames(mydata), colnames(mysecond),FUN = Vectorize(are.cols.identical))
cut <- apply(res, 1, function(x)match(TRUE, x))
### 3
(mydata$Rad) %in% (mysecond$Ro5_P1_A5)
#### 4
which(mydata %in% mysecond)
#### 5
match(mydata$sus., mysecond$R5_P1_A5)

which(mydata$sus. %in% mysecond$RP1_A5)

matches <- sapply(mydata,function(x) sapply(mysecond,identical,x))

和其他几个人,但没有人引导我回答

2 个答案:

答案 0 :(得分:1)

以下是使用正则表达式的另一种解决方案:

rows<-mapply(grep,mysecond,mydata)

上面的步骤将返回一个列表,其中包含每列中匹配的行:

rows

如果您想查看匹配的行数,可以执行此操作:

lapply(rows,length)

现在我们可以继续获取mydata中感兴趣的行,但是行是一个列表,所以我们需要unlist(),我们可能会有一些重复的行,我们不希望它们出现两次输出,所以我们使用unique()函数:

rows<-unique(unlist(rows))
mydata[rows,]
#View(mydata[rows,])

答案 1 :(得分:0)

require(plyr)
dat <- strsplit(as.character(mydata$subunits..UniProt.IDs.), ',')

dat <- data.frame(mydata[,1],rbind.fill(lapply(dat,function(y){as.data.frame(t(y),stringsAsFactors=FALSE)})))

mydata[unlist(apply(dat,2, function(x) which(x %in% mysecond[,2]))),]
相关问题