r - 使用正则表达式从数据框中提取等位基因特定信息并将其拆分为两个新的数据框
问题描述
我有一个 100 x 100 的数据框,其中包含基因组中 100 个 SNP 的 100 个样本 ID,格式如下。
structure(list(`c("12545=1", "12545=0")` = c("12545=1|1", "12545=0|0"
), `c("12994=0|0", "12994=0|1")` = c("12994=0|0", "12994=0|1"
), `c("15240=0|0", "15240=1|1")` = c("15240=0|0", "15240=1|1"
)), row.names = c(NA, -2L), class = c("tbl_df", "tbl", "data.frame"
))
两侧的整数|
代表每个个体的基因型。我正在寻找 bash 或 R 中的解决方案,可能使用正则表达式,它创建两个新的数据框,每个数据框的尺寸都与第一个相同。一个数据帧仅包含每个基因座的每个样本的参考等位基因信息,因此仅包含 之前的整数值,|
而第二个数据帧包含每个基因座的备用等位基因信息,即|
每个单元格中仅包含 之后的整数值。因此,将生成两个 1 和 0 的新 100 x 100 数据帧。
之前的一切都=
可以忽略。
任何有关如何解决此问题的建议将不胜感激。
解决方案
假设您的数据存储在 data framedf
中,这应该可以满足您的要求:
library(tidyverse)
df1 <- df %>%
mutate_all(~ str_extract(., "\\d(?=\\|)"))
df2 <- df %>%
mutate_all(~ str_extract(., "(?<=\\|)\\d"))
df1
# `c("12545=1", "12545=0")` `c("12994=0|0", "12994=0|1")` `c("15240=0|0", "15240=1|1")`
# <chr> <chr> <chr>
# 1 1 0 0
# 2 0 0 1
df2
# `c("12545=1", "12545=0")` `c("12994=0|0", "12994=0|1")` `c("15240=0|0", # "15240=1|1")`
# <chr> <chr> <chr>
# 1 1 0 0
# 2 0 1 1
请注意,您的示例中的列名有点奇怪,但它应该可以工作。
推荐阅读
- node.js - Socket.io 不适用于 on 事件(“连接”)
- hive - 配置单元字符串 yymmdd 到日期类型 yyyymmdd
- python - 显示文件内容
- sql - SSRS 将参数传递给 SSAS
- json - 在 PySpark 中解析嵌套的 JSON 并转换为 csv
- php - @entangle 初始状态在内部视图侧始终设置为 true
- leaflet - 如何使用 Leaflet.js 在地图上显示特定位置的标记
- javascript - 即使我在代码中更改了字符串的值,它也没有改变
- java - 无法使用 10 到 99 的随机数填充 25 个整数的数组。/java
- javascript - 如何在mysql数据库laravel中存储数组数据?