首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:识别(部分)匹配单元

R:识别(部分)匹配单元
EN

Stack Overflow用户
提问于 2021-09-02 08:45:57
回答 2查看 62关注 0票数 0

我有一个有几千行和数百列的表。我需要识别(部分)匹配几个关键字的单元格(),而不是过滤表。到目前为止,我所能找到的只有函数WhichCells {SeuratObject} -唉,我无法让它工作。

例如

代码语言:javascript
复制
Column1 <- c("Temperature", "Water", "Sun", "tree fighter", "rainbow")
Column2 <- c(60.1, 106, 78.6, 21.5, 71)
Column3 <- c("Another cell", NA, "more content", NA, "Thanks!")
    
df <- data.frame(Column1, Column2, Column3)
df

pattern <- c("temp", "content", 55, "heart", "thanks")

希望得到的结果如下所示

代码语言:javascript
复制
pattern   Column    Row
1    temp Column1   1
2 content Column3   3
3  thanks Column3   5

注意:行也可以作为行名返回。

拜托,有人能给我建议怎么解决这个问题吗?非常感谢!

EN

回答 2

Stack Overflow用户

发布于 2021-09-02 08:58:30

在这里,这是答案的一部分,但您应该做一些调整,以考虑上/下情况:

代码语言:javascript
复制
pattern <- c("Temp", "content", 55, "heart", "Thanks")

detectpattern <- function(df, pattern){
    colindex <- which(apply(df, 1, str_detect, pattern = pattern))
    rowindex <- which(apply(df, 2, str_detect, pattern = pattern))
    return(c(pattern, colindex, rowindex))
}

for (pat in pattern){
    print(detectpattern(df = df, pattern = pat))
}
票数 0
EN

Stack Overflow用户

发布于 2021-09-03 01:23:00

你可以试试

代码语言:javascript
复制
df %>%
  tibble::rownames_to_column(., var = "Row") %>%
  melt(id.vars = "Row", value.name = "patterns", variable.name = "Column") %>% 
  mutate(check = ((sapply(pattern, function(x) {str_detect(patterns, regex(x, ignore_case = T)) %>% as.numeric} ))%>% rowSums(., na.rm=TRUE))) %>%
  filter(check == 1) %>% select(-check)


  Row  Column     patterns
1   1 Column1  Temperature
2   3 Column3 more content
3   5 Column3      Thanks!
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69026957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档