我问了一个问题,之前很复杂,我没有得到任何帮助。所以我试着简化问题并输入输出。
我尝试了很多方法,但没有一个方法可以解决,例如,我将一些
排序 #1for(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))
和其他几个人,但没有人引导我回答
答案 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]))),]