检查数据框中的元素是否存在于另一个数据框中

检查数据框中的元素是否存在于另一个数据框中,第1张

概述假设我有以下两个表: 表格1: id word1 apple1 banana2 cherry2 donuts3 eggplant3 fish 表2(key_words): key_wordsappleorangecherrypeach 我想检查table1的’word’列中的每个元素是否存在于table2中,并得到以下结果: 假设我有以下两个表:

表格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
总结

以上是内存溢出为你收集整理的检查数据框中的元素是否存在于另一个数据框中全部内容,希望文章能够帮你解决检查数据框中的元素是否存在于另一个数据框中所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1071023.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存