【问题标题】:R: check if a vector is part of any row in a dataframeR:检查向量是否是数据框中任何行的一部分
【发布时间】:2018-04-12 20:18:31
【问题描述】:

假设我有这个向量c("a", "b", "c") 和以下数据框:

a d t g h
r a b c
a b c
m p o a b t
c t b a
a b c t g

我的向量的长度始终为 3,每个数据框行的长度可以在 3 到 6 列之间。如何检查我的向量是否是 data.frame 行的一部分,而不遍历每行的每个元素?

对于我给出的示例,预期的输出将是:

FALSE
TRUE
TRUE
FALSE
FALSE
TRUE

【问题讨论】:

  • 顺序重要吗?如果您能与dput() 分享您的样本数据会很有帮助,这样我们就可以看到结构...
  • @Gregor 是的,顺序很重要。这就是倒数第二行 (c t b a) 被标记为 FALSE 的原因。
  • “空”条目中有什么 - NA"" 或其他内容?如果您与dput() 共享您的样本数据,这将很有帮助,这样我们就可以看到结构。只需输入 dput(head(your_data)) 并将结果粘贴到问题中即可。
  • @Gregor,空条目可以是 NA 或 ""。

标签: r dataframe vector


【解决方案1】:

只需为每一行创建一个字符串,然后使用grepl

# My version of your data
check_values <- c("a", "b", "c")
my_data <- structure(list(V1 = c("a", "r", "a", "m", "c", "a"), V2 = c("d", 
"a", "b", "p", "t", "b"), V3 = c("t", "b", "c", "o", "b", "c"
), V4 = c("g", "c", NA, "a", "a", "t"), V5 = c("h", NA, NA, "b", 
NA, "g"), V6 = c(NA, NA, NA, "t", NA, NA)), .Names = c("V1", 
"V2", "V3", "V4", "V5", "V6"), row.names = c(NA, -6L), class = "data.frame")

# Actual solution
row_strings <- do.call(paste0, my_data)
check_string <- paste0(check_values, collapse = "")
grepl(check_string, row_strings, fixed = TRUE)
# [1] FALSE  TRUE  TRUE FALSE FALSE  TRUE

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,我记得@akrun 发布了一个对我的问题非常有帮助的答案。我试图找到原始答案,但没有运气;这是参考他的回答的方法:

    do.call(paste0, df) %in% 
                     do.call(paste0, df[apply(df, 1, function(x) all(diff(match(vec, x))>0)),])
    
    #  [1] FALSE  TRUE  TRUE FALSE FALSE  TRUE
    

    【讨论】:

      【解决方案3】:

      可以使用applystringr::detect as 编写单行解决方案

      library(stringr)
      
      apply(df, 1, function(x)str_detect(paste(x, collapse=""), paste(v, collapse="")))
      
      #[1] FALSE  TRUE  TRUE FALSE FALSE  TRUE
      

      注意:可以使用grepl 代替str_detect

      【讨论】:

      • 我无法使用 grepl,但使用 str_detect 可以完美运行!
      猜你喜欢
      • 1970-01-01
      • 2018-04-24
      • 1970-01-01
      • 2013-01-26
      • 2021-01-20
      • 2017-12-21
      • 1970-01-01
      • 1970-01-01
      • 2015-12-14
      相关资源
      最近更新 更多