简单重新格式化问题

时间:2018-07-25 22:25:05

标签: r reformatting

我正在尝试从数据表中获取成对分配,如下所示:

A*01:01:01G 01:01:01:01/01:01:01:02N/01:01:01:03/01:01:01:04/01:01:01:05/01:01:01:06/01:01:01:07/01:01:01:08/01:01:01:09/01:01:01:10/01:01:01:11/01:01:01:12/01:01:01:13/01:01:01:14/01:01:01:15/01:01:01:16/01:01:01:17/01:01:01:18/01:01:38L/01:01:51/01:01:83/01:01:84/01:04:01:01N/01:04:01:02N/01:22N/01:32/01:37/01:45/01:56N/01:81/01:87N/01:103/01:107/01:109/01:132/01:141/01:142/01:155/01:177/01:212/01:217/01:234/01:237/01:246/01:248Q/01:249/01:251/01:252/01:253/01:261
A*02:01:01G 02:01:01:01/02:01:01:02L/02:01:01:03/02:01:01:04/02:01:01:05/02:01:01:06/02:01:01:07/02:01:01:08/02:01:01:09/02:01:01:10/02:01:01:11/02:01:01:12/02:01:01:13/02:01:01:14/02:01:01:15/02:01:01:16/02:01:01:17/02:01:01:18/02:01:01:19/02:01:01:20/02:01:01:21/02:01:01:22/02:01:01:23/02:01:01:24/02:01:01:25/02:01:01:26/02:01:01:27/02:01:01:28/02:01:01:29/02:01:01:30/02:01:01:31/02:01:01:32/02:01:01:33/02:01:01:34/02:01:01:35/02:01:01:36/02:01:01:37/02:01:01:38/02:01:01:39/02:01:01:40/02:01:01:41/02:01:08/02:01:104/02:01:11/02:01:130/02:01:131/02:01:132/02:01:133/02:01:134/02:01:135/02:01:136/02:01:143/02:01:14Q/02:01:15/02:01:21/02:01:48/02:01:50/02:01:79/02:01:80/02:01:89/02:01:97/02:01:98/02:01:99/02:09:01:01/02:09:01:02/02:43N/02:66/02:75/02:83N/02:89/02:97:01/02:97:02/02:132/02:134/02:140/02:241/02:252/02:256/02:266/02:291/02:294/02:305N/02:327/02:329/02:356N/02:357/02:397/02:411/02:446/02:455/02:469/02:481/02:538/02:559/02:607/02:608N/02:614/02:629/02:642/02:665/02:675N/02:685/02:686/02:687/02:689/02:690/02:691N/02:692/02:704/02:716/02:719/02:720/02:722/02:724/02:726/02:739/02:740

我想要的输出如下:

A*01:01:01G 01:01:01:01
A*01:01:01G 01:01:01:02N
...
A*02:01:01G 02:01:01:01
A*02:01:01G 02:01:01:02L
...

任何帮助将不胜感激,优先使用R代码。

谢谢, 克里斯

1 个答案:

答案 0 :(得分:1)

请注意,我假设您的输入数据是两列data.frame / data.table(从您的帖子中很难分辨出来)。

data.table解决方案

library(data.table)
dt <- as.data.table(df)
dt[, V2 := strsplit(as.character(V2), "/")][, lapply(.SD, unlist), by = V1]
#            V1           V2
#1: A*01:01:01G  01:01:01:01
#2: A*01:01:01G 01:01:01:02N
#3: A*01:01:01G  01:01:01:03
#4: A*01:01:01G  01:01:01:04
#5: A*01:01:01G  01:01:01:05
#---
#163: A*02:01:01G       02:722
#164: A*02:01:01G       02:724
#165: A*02:01:01G       02:726
#166: A*02:01:01G       02:739
#167: A*02:01:01G       02:740

tidyverse解决方案

library(tidyverse)
df %>%
    mutate_if(is.factor, as.character) %>%
    mutate(V2 = strsplit(V2, "/")) %>%
    unnest()
#    V1           V2
#1   A*01:01:01G  01:01:01:01
#2   A*01:01:01G 01:01:01:02N
#3   A*01:01:01G  01:01:01:03
#4   A*01:01:01G  01:01:01:04
#5   A*01:01:01G  01:01:01:05
#6   A*01:01:01G  01:01:01:06
#...

样本数据

df <- read.table(text =
    "A*01:01:01G 01:01:01:01/01:01:01:02N/01:01:01:03/01:01:01:04/01:01:01:05/01:01:01:06/01:01:01:07/01:01:01:08/01:01:01:09/01:01:01:10/01:01:01:11/01:01:01:12/01:01:01:13/01:01:01:14/01:01:01:15/01:01:01:16/01:01:01:17/01:01:01:18/01:01:38L/01:01:51/01:01:83/01:01:84/01:04:01:01N/01:04:01:02N/01:22N/01:32/01:37/01:45/01:56N/01:81/01:87N/01:103/01:107/01:109/01:132/01:141/01:142/01:155/01:177/01:212/01:217/01:234/01:237/01:246/01:248Q/01:249/01:251/01:252/01:253/01:261
A*02:01:01G 02:01:01:01/02:01:01:02L/02:01:01:03/02:01:01:04/02:01:01:05/02:01:01:06/02:01:01:07/02:01:01:08/02:01:01:09/02:01:01:10/02:01:01:11/02:01:01:12/02:01:01:13/02:01:01:14/02:01:01:15/02:01:01:16/02:01:01:17/02:01:01:18/02:01:01:19/02:01:01:20/02:01:01:21/02:01:01:22/02:01:01:23/02:01:01:24/02:01:01:25/02:01:01:26/02:01:01:27/02:01:01:28/02:01:01:29/02:01:01:30/02:01:01:31/02:01:01:32/02:01:01:33/02:01:01:34/02:01:01:35/02:01:01:36/02:01:01:37/02:01:01:38/02:01:01:39/02:01:01:40/02:01:01:41/02:01:08/02:01:104/02:01:11/02:01:130/02:01:131/02:01:132/02:01:133/02:01:134/02:01:135/02:01:136/02:01:143/02:01:14Q/02:01:15/02:01:21/02:01:48/02:01:50/02:01:79/02:01:80/02:01:89/02:01:97/02:01:98/02:01:99/02:09:01:01/02:09:01:02/02:43N/02:66/02:75/02:83N/02:89/02:97:01/02:97:02/02:132/02:134/02:140/02:241/02:252/02:256/02:266/02:291/02:294/02:305N/02:327/02:329/02:356N/02:357/02:397/02:411/02:446/02:455/02:469/02:481/02:538/02:559/02:607/02:608N/02:614/02:629/02:642/02:665/02:675N/02:685/02:686/02:687/02:689/02:690/02:691N/02:692/02:704/02:716/02:719/02:720/02:722/02:724/02:726/02:739/02:740")