检查每个id和每行的数据帧列是否存在id

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了检查每个id和每行的数据帧列是否存在id相关的知识,希望对你有一定的参考价值。

我有一个长度为n的向量(在本例中为m = 10),其ID为:

set.seed(12222017)
library(dplyr)
N <- 100
IDs <- do.call(paste0, replicate(7, sample(LETTERS, 10, TRUE), FALSE))

我有一个1 + J列和N行的数据框

df1 <- data.frame(DRAW=1:N, V1=sample(IDs,N, replace = T), 
                  V2=sample(IDs,N, replace = T), 
                  V3=sample(IDs,N, replace = T)) %>% 
  mutate(V1 = as.character(V1), V2 = as.character(V2), V3=as.character(V3))

我想使用该数据生成如下所示的新数据框:

   DRAW OYKGVZZ OWGNEYU MGPARZW GZXTXFV IXNGUCE QMYFNVZ FLZPQDJ XXSOCZZ QHBSIFX GQBZNGQ
1:    1       1       0       0       0       1       0       0       0       1       0
2:    2       0       0       0       0       1       0       0       1       0       1
3:    3       0       0       0       1       0       0       0       1       0       1
4:    4       0       0       1       0       0       0       0       1       1       0
5:    5       0       0       0       0       1       0       1       1       0       0
6:    6       0       0       0       1       0       1       0       0       0       0

我可以使用以下代码执行此操作:

checkRowXidX <- function(DRAW, idX){
  check <- idX %in% df1[DRAW,-1]
  out <- data.frame(DRAW = DRAW, idX=idX, check = as.numeric(check))

}

tests <- expand.grid(df1$DRAW,IDs)

checks <- purrr::map2(tests$Var1, tests$Var2, checkRowXidX) %>% 
  data.table::rbindlist() %>% tidyr::spread(idX, check)

checks %>% head

有更有效的方法吗?在实践中,我将使用更大的数据,这种方法需要一段时间才能运行。

以上是关于检查每个id和每行的数据帧列是否存在id的主要内容,如果未能解决你的问题,请参考以下文章

当 ID 匹配时,在其他 Pyspark 数据帧中按列划分 Pyspark 数据帧列

根据 Oracle 的 SQL 中的优先级返回每个键的行

jQuery:检查是否存在具有某个类名的div

ADO.NET:使用 id 检查名称是不是已存在于数据库中

使用事件ID检查事件是否存在

检查Firestore中是否存在用户