【问题标题】:how to add title of gene to the output in R?如何将基因的标题添加到 R 的输出中?
【发布时间】:2019-12-27 20:14:45
【问题描述】:

我有 9 个长度的字符串和带有标题的较长字符串列表

示例数据:

String <- "ABCDEFGHI", "ACBDGHIEF"

文本文件中的数据包含“带有标题的较长字符串”,例如

>name
ABCDEFGHIJKLMNOPQRSTUVWXYX
>name1
TUVWXYACBDGHIEFXGHIJKLMIJK
>name2
ABFNOCDEPQRXYXGSTUVWHIMJKL

我使用library(stringr) 来定位每个字符串的位置。

R 中的代码

loc <- str_locate(textfile,pattern = strings)
write.csv(loc, "locate.csv")

预期输出

字符串 |定位 | 较长字符串的来源

1 | 1-9| 姓名1

2 | 7-15|name2

3 |不适用| 不适用

问题

我想添加“字符串”所在的较长字符串的名称?如何在 R 中做到这一点?我想要最后一列(在预期结果中用粗体显示)。

感谢您的帮助

文卡塔

【问题讨论】:

  • 开始结束 1 1 9 2 7 15 3 NA NA
  • 嗨 akrun - 我确实更新了预期的结果。我想知道如何获得最后一列加粗的。感谢您的宝贵时间。
  • 是的,但这就是混乱。对于第一个基因,我发现标题是name,它也与"ABCDEFGHI" 匹配。您显示两个 'String' 的长度相同,所以不清楚 'name1' 是如何匹配的
  • 这是我的错。你是对的 - 'name' 中的第一个字符串和 'name1' 中的第二个字符串。对不起

标签: r stringr


【解决方案1】:

这是tidyverse 的选项。在使用readLines 读取数据后,基于 'title' 与 'value' 的出现,它是交替的,因此可以选择使用回收逻辑向量 ('i1') 将其分成列或向量,应用str_locate 只有'value' ('col2'),通过检查'locate' 中是否有NA 元素来创建row_number 列和'source_longer_string'

library(dplyr)
library(stringr)
i1 <- c(TRUE, FALSE)
df1 <- tibble(col1 = textfile[i1], col2 = textfile[!i1])
str_locate(df1$col2, str_c(String, collapse="|")) %>% 
  as.data.frame %>%
  transmute(string = row_number(), 
           locate = str_c(start, end, sep="-"),
           source_longer_string = case_when(is.na(locate) ~ NA_character_, 
           TRUE ~ df1$col1))
#   string locate source_longer_string
#1      1    1-9                >name
#2      2   7-15               >name1
#3      3   <NA>                 <NA>

数据

textfile <- readLines(textConnection(">name
ABCDEFGHIJKLMNOPQRSTUVWXYX
>name1
TUVWXYACBDGHIEFXGHIJKLMIJK
>name2
ABFNOCDEPQRXYXGSTUVWHIMJKL"))

String <- c("ABCDEFGHI", "ACBDGHIEF")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 2018-02-28
    • 2012-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多