表格1:
ID word1 apple1 banana2 cherry2 donuts3 eggplant3 fish
表2(key_words):
key_wordsappleorangecherrypeach
我想检查table1的’word’列中的每个元素是否存在于table2中,并得到以下结果:
ID apple orange cherry peach1 1 0 0 02 0 0 1 03 0 0 0 0
例如,
第一行中的1和“apple”列表示ID 1确实有一个苹果.
第二行为0,“orange”列表示ID 2没有橙色.
为了得到这样的结果,我写了一个for循环:
data=List()data[[1]]=table1$IDl=dim(table1)[1]for(i in 2:(length(key_words)+1)){ exist=c() for(j in 1:l){ d1=table1[which(table1$ID==data[[1]][j]),] if(key_words[i] %in% d1$word){ exist[j]=1 } else { exist[j]=0 } } data[[i]]=exist}data=as.data.frame(data)names(data)=c("ID","apple","orange","cherry","peach")
它确实有效.
但是,如果我的表大小和关键字数量变得更大,例如,如果我有10,000个ID和1,000个关键字,for循环将运行很长时间.
是否有一些更快的方法来缩短运行时间?
解决方法library(data.table)dat <- fread("ID word1 apple 1 banana 2 cherry 2 donuts 3 eggplant 3 fish")dat_key <- fread("key_wordsappleorangecherrypeach")dat_wIDe <- data.table(ID = unique(dat$ID))l <- lapply(dat_key$key_words,function(x) dat_wIDe[,(x) := ifelse(ID %in% dat[word == x]$ID,1,0)][])dat_wIDe ID apple orange cherry peach1: 1 1 0 0 02: 2 0 0 1 03: 3 0 0 0 0总结
以上是内存溢出为你收集整理的检查数据框中的元素是否存在于另一个数据框中全部内容,希望文章能够帮你解决检查数据框中的元素是否存在于另一个数据框中所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)