Chudar Chudar - 1 month ago 6
R Question

Appending new line entries to previous line in R

I am new to R and I have tab delimited file like follows

A1 HI_0004674; HI_0005524; HI_0016055; HI_0004672; HI_0004674; HI_0005524; HI_0005634; HI_0005730; HI_0005737; HI_0005829; HI_0005956; HI_0006468; HI_0007067; HI_0007228; HI_0007310; HI_0007411; HI_0007623; HI_0009267; HI_0016055; HI_0022416; HI_0030177; HI_0031397; HI_0031647; HI_0045475; HI_0045880; HI_0046331; HI_0048749; HI_0060810; HI_0001558; HI_0004674; HI_0005524; HI_0005634; HI_0005956; HI_0006351; HI_0006355; HI_0006468; HI_0006915; HI_0008284; HI_0016055; HI_0019888; HI_0030177; HI_0030307; HI_0042127; HI_0043154; HI_0045732; HI_0046777; HI_0048511; HI_0071174;
HI_0004674; HI_0005524; HI_0005634; HI_0016055; HI_0048511; HI_0004674; HI_0005524; HI_0005634; HI_0016055; HI_0004674; HI_0005524; HI_0005634; HI_0006351; HI_0006355; HI_0006468; HI_0006915; HI_0008284; HI_0016055; HI_0030177; HI_0030307; HI_0043154; HI_0045732; HI_0048511; HI_0071174; HI_0004674; HI_0005524; HI_0005634; HI_0006351; HI_0006355; HI_0006468; HI_0006915; HI_0008284; HI_0016055; HI_0030177; HI_0030307; HI_0043154; HI_0045732; HI_0047485; HI_0048511; HI_0071174; HI_0004674; HI_0005524; HI_0005634; HI_0005654; HI_0005829; HI_0005886; HI_0006351; HI_0006355; HI_0006457; HI_0006468; HI_0006915; HI_0007165; HI_0008284; HI_0016055; HI_0016580; HI_0016581; HI_0019888; HI_0030177; HI_0030307; HI_0043154; HI_0045732; HI_0046777; HI_0047485; HI_0048511; HI_0051879; HI_0061077; HI_0071174; HI_1901796;
HI_0004674; HI_0005524; HI_0005634; HI_0005956; HI_0006351; HI_0006355; HI_0006468; HI_0006915; HI_0008013; HI_0008284; HI_0016055; HI_0016301; HI_0016580; HI_0016581; HI_0019888; HI_0030177; HI_0030307; HI_0031519; HI_0043154; HI_0045732; HI_0046777; HI_0047485; HI_0048511; HI_0071174; HI_0004674; HI_0005524; HI_0006468; HI_0008284; HI_0019888; HI_0030307; HI_0045732; HI_0046777
A2 HI_0004674; HI_0005524; HI_0016055; HI_0004672; HI_0004674; HI_0005524; HI_0005634; HI_0005730; HI_0005737; HI_0005829; HI_0005956; HI_0006468; HI_0007067; HI_0007228; HI_0007310; HI_0007411; HI_0007623; HI_0009267; HI_0016055; HI_0022416; HI_0030177; HI_0031397; HI_0031647; HI_0045475; HI_0045880; HI_0046331; HI_0048749; HI_0060810; HI_0001558; HI_0004674; HI_0005524; HI_0005634; HI_0005956; HI_0006351; HI_0006355; HI_0006468; HI_0006915; HI_0008284; HI_0016055; HI_0019888; HI_0030177; HI_0030307; HI_0042127; HI_0043154; HI_0045732; HI_0046777; HI_0048511; HI_0071174;
HI_0004674; HI_0005524; HI_0005634; HI_0016055; HI_0048511; HI_0004674; HI_0005524; HI_0005634; HI_0016055; HI_0004674; HI_0005524; HI_0005634; HI_0006351; HI_0006355; HI_0006468; HI_0006915; HI_0008284; HI_0016055; HI_0030177; HI_0030307; HI_0043154; HI_0045732; HI_0048511; HI_0071174; HI_0004674; HI_0005524; HI_0005634; HI_0006351; HI_0006355; HI_0006468; HI_0006915; HI_0008284; HI_0016055; HI_0030177; HI_0030307; HI_0043154; HI_0045732; HI_0047485; HI_0048511; HI_0071174; HI_0004674; HI_0005524; HI_0005634; HI_0005654; HI_0005829; HI_0005886; HI_0006351; HI_0006355; HI_0006457; HI_0006468; HI_0006915; HI_0007165; HI_0008284; HI_0016055; HI_0016580; HI_0016581; HI_0019888; HI_0030177; HI_0030307; HI_0043154; HI_0045732; HI_0046777; HI_0047485; HI_0048511; HI_0051879; HI_0061077; HI_0071174; HI_1901796;
HI_0004674; HI_0005524; HI_0005634; HI_0005956; HI_0006351; HI_0006355; HI_0006468; HI_0006915; HI_0008013; HI_0008284; HI_0016055; HI_0016301; HI_0016580; HI_0016581; HI_0019888; HI_0030177; HI_0030307; HI_0031519; HI_0043154; HI_0045732; HI_0046777; HI_0047485; HI_0048511; HI_0071174; HI_0004674; HI_0005524; HI_0006468; HI_0008284; HI_0019888; HI_0030307; HI_0045732; HI_0046777


I would like re-arrange the data frame so that new line entries before the every ID to be appended like the following:

Thanks in advance.Kindly guide me

Answer

We can read the data with readLines, create a grouping variable with grep and cumsum, then paste the 'lines' use tapply and then read it with read.table

grp <- cumsum(!grepl("^(\\S+;|\\S+)$", lines[-1]))
read.table(text=c(lines[1], tapply(lines[-1], grp, FUN = paste, 
         collapse="")), header=TRUE, stringsAsFactors=FALSE)
#  Id                            Values
#1 A1 Aj1;B3;C4;B23;C56;N23;G34;L78;Z65
#2 B2       Md1;K45;OK1;Nf3;P56;L76;A98
#3 C3       Q23;W12;Z56;K9v;j56;d34;H65

For the new dataset

lines2 <- trimws(readLines("yourfile2.txt"))
grp <- cumsum(!grepl("^\\S+;", lines2))
read.csv(text=sub("\\s+", ",", tapply(lines2, grp, FUN = paste, 
         collapse="")), header= FALSE, stringsAsFactors=FALSE)
  V1
1 A1
2 A2
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            V2
1 HI_0004674; HI_0005524; HI_0016055; HI_0004672; HI_0004674; HI_0005524; HI_0005634; HI_0005730; HI_0005737; HI_0005829; HI_0005956; HI_0006468; HI_0007067; HI_0007228; HI_0007310; HI_0007411; HI_0007623; HI_0009267; HI_0016055; HI_0022416; HI_0030177; HI_0031397; HI_0031647; HI_0045475; HI_0045880; HI_0046331; HI_0048749; HI_0060810; HI_0001558; HI_0004674; HI_0005524; HI_0005634; HI_0005956; HI_0006351; HI_0006355; HI_0006468; HI_0006915; HI_0008284; HI_0016055; HI_0019888; HI_0030177; HI_0030307; HI_0042127; HI_0043154; HI_0045732; HI_0046777; HI_0048511; HI_0071174;HI_0004674; HI_0005524; HI_0005634; HI_0016055; HI_0048511; HI_0004674; HI_0005524; HI_0005634; HI_0016055; HI_0004674; HI_0005524; HI_0005634; HI_0006351; HI_0006355; HI_0006468; HI_0006915; HI_0008284; HI_0016055; HI_0030177; HI_0030307; HI_0043154; HI_0045732; HI_0048511; HI_0071174; HI_0004674; HI_0005524; HI_0005634; HI_0006351; HI_0006355; HI_0006468; HI_0006915; HI_0008284; HI_0016055; HI_0030177; HI_0030307; HI_0043154; HI_0045732; HI_0047485; HI_0048511; HI_0071174; HI_0004674; HI_0005524; HI_0005634; HI_0005654; HI_0005829; HI_0005886; HI_0006351; HI_0006355; HI_0006457; HI_0006468; HI_0006915; HI_0007165; HI_0008284; HI_0016055; HI_0016580; HI_0016581; HI_0019888; HI_0030177; HI_0030307; HI_0043154; HI_0045732; HI_0046777; HI_0047485; HI_0048511; HI_0051879; HI_0061077; HI_0071174; HI_1901796;HI_0004674; HI_0005524; HI_0005634; HI_0005956; HI_0006351; HI_0006355; HI_0006468; HI_0006915; HI_0008013; HI_0008284; HI_0016055; HI_0016301; HI_0016580; HI_0016581; HI_0019888; HI_0030177; HI_0030307; HI_0031519; HI_0043154; HI_0045732; HI_0046777; HI_0047485; HI_0048511; HI_0071174; HI_0004674; HI_0005524; HI_0006468; HI_0008284; HI_0019888; HI_0030307; HI_0045732; HI_0046777
2 HI_0004674; HI_0005524; HI_0016055; HI_0004672; HI_0004674; HI_0005524; HI_0005634; HI_0005730; HI_0005737; HI_0005829; HI_0005956; HI_0006468; HI_0007067; HI_0007228; HI_0007310; HI_0007411; HI_0007623; HI_0009267; HI_0016055; HI_0022416; HI_0030177; HI_0031397; HI_0031647; HI_0045475; HI_0045880; HI_0046331; HI_0048749; HI_0060810; HI_0001558; HI_0004674; HI_0005524; HI_0005634; HI_0005956; HI_0006351; HI_0006355; HI_0006468; HI_0006915; HI_0008284; HI_0016055; HI_0019888; HI_0030177; HI_0030307; HI_0042127; HI_0043154; HI_0045732; HI_0046777; HI_0048511; HI_0071174;HI_0004674; HI_0005524; HI_0005634; HI_0016055; HI_0048511; HI_0004674; HI_0005524; HI_0005634; HI_0016055; HI_0004674; HI_0005524; HI_0005634; HI_0006351; HI_0006355; HI_0006468; HI_0006915; HI_0008284; HI_0016055; HI_0030177; HI_0030307; HI_0043154; HI_0045732; HI_0048511; HI_0071174; HI_0004674; HI_0005524; HI_0005634; HI_0006351; HI_0006355; HI_0006468; HI_0006915; HI_0008284; HI_0016055; HI_0030177; HI_0030307; HI_0043154; HI_0045732; HI_0047485; HI_0048511; HI_0071174; HI_0004674; HI_0005524; HI_0005634; HI_0005654; HI_0005829; HI_0005886; HI_0006351; HI_0006355; HI_0006457; HI_0006468; HI_0006915; HI_0007165; HI_0008284; HI_0016055; HI_0016580; HI_0016581; HI_0019888; HI_0030177; HI_0030307; HI_0043154; HI_0045732; HI_0046777; HI_0047485; HI_0048511; HI_0051879; HI_0061077; HI_0071174; HI_1901796;HI_0004674; HI_0005524; HI_0005634; HI_0005956; HI_0006351; HI_0006355; HI_0006468; HI_0006915; HI_0008013; HI_0008284; HI_0016055; HI_0016301; HI_0016580; HI_0016581; HI_0019888; HI_0030177; HI_0030307; HI_0031519; HI_0043154; HI_0045732; HI_0046777; HI_0047485; HI_0048511; HI_0071174; HI_0004674; HI_0005524; HI_0006468; HI_0008284; HI_0019888; HI_0030307; HI_0045732; HI_0046777

data

lines <- trimws(readLines("yourfile.txt"))

Or

lines <- trimws(readLines(textConnection("Id   Values
A1 Aj1;B3;C4;
B23;C56;N23;G34;
L78;Z65
B2 Md1;K45;OK1;
Nf3;P56;L76;
A98
C3 Q23;W12;Z56;
K9v;j56;d34;
H65")))
Comments