我想根据行的字符将位于一列中的数据拆分为两个单独的列。以下是数据:
3C-assembly|contig_93
ptg000037l
3C-assembly|contig_94
ptg000039l
3C-assembly|contig_95
ptg000043l
3C-assembly|contig_96
ptg000196l
ptg000060l
3C-assembly|contig_97
ptg000083l
ptg000083l
3C-assembly|contig_98
ptg000117l
ptg000005l
3C-assembly|contig_99
ptg000123l
ptg000123l
ptg0001232
ptg0001233 我需要把所有3C-assembly|contig_放在第一列,把所有对应的ptg000放在第二列:
3C-assembly|contig_93 ptg000037l
3C-assembly|contig_94 ptg000039l
3C-assembly|contig_95 ptg000043l
3C-assembly|contig_96 ptg000196l
3C-assembly|contig_96 ptg000060l
3C-assembly|contig_97 ptg000083l
3C-assembly|contig_97 ptg000083l
3C-assembly|contig_98 ptg000117l
3C-assembly|contig_98 ptg000005l
3C-assembly|contig_99 ptg000123l
3C-assembly|contig_99 ptg000123l
3C-assembly|contig_99 ptg0001232
3C-assembly|contig_99 ptg0001233
...........发布于 2021-05-20 00:36:41
这是一个R的答案。如果您在存在"3C“(或您的组的某个其他标识符,可能是"|"-character)时使用cumsum创建了一个分组向量,则可以通过数据帧定义的R循环约定将第一个项(一次)拆分并用于任何剩余项:
dat <- read.table(text=txt) # copied your data into txt
dat <- cbind(dat, grp=cumsum( grepl("3C", dat$V1) ))
#grepl pattern could have been "assembly" if that were more general
do.call(rbind, lapply( split(dat, dat$grp),
function(x) data.frame(
group=x[1,1], # first gets recycled
item=x[-1,1]) ) ) # the rest
group item
1 3C-assembly|contig_93 ptg000037l
2 3C-assembly|contig_94 ptg000039l
3 3C-assembly|contig_95 ptg000043l
4.1 3C-assembly|contig_96 ptg000196l
4.2 3C-assembly|contig_96 ptg000060l
5.1 3C-assembly|contig_97 ptg000083l
5.2 3C-assembly|contig_97 ptg000083l
6.1 3C-assembly|contig_98 ptg000117l
6.2 3C-assembly|contig_98 ptg000005l
7.1 3C-assembly|contig_99 ptg000123l
7.2 3C-assembly|contig_99 ptg000123l
7.3 3C-assembly|contig_99 ptg0001232
7.4 3C-assembly|contig_99 ptg0001233发布于 2021-05-20 02:34:19
在python中:
#假设数据在pandas数据帧中。我刚刚创建了它:
import pandas as pd
a=[
"3C-assembly|contig_93 ptg000037l",
"3C-assembly|contig_94 ptg000039l",
"3C-assembly|contig_95 ptg000043l",
"3C-assembly|contig_96 ptg000196l",
"3C-assembly|contig_96 ptg000060l",
"3C-assembly|contig_97 ptg000083l",
"3C-assembly|contig_97 ptg000083l",
"3C-assembly|contig_98 ptg000117l",
"3C-assembly|contig_98 ptg000005l",
"3C-assembly|contig_99 ptg000123l",
"3C-assembly|contig_99 ptg000123l",
"3C-assembly|contig_99 ptg0001232",
"3C-assembly|contig_99 ptg0001233"]
a=pd.DataFrame(a, columns=["data"])
#Define Function to SPlit and Extract
def ExtractContig(Name):
#Split Based on Space
splitgroup=Name.strip().split(' ')
contigselect = splitgroup[0]
ptgselect=splitgroup[1]
# Split Based on Underscore to get first column
contig = contigselect.strip().split('_')[-1]
#Split Based on "g" of the string ptgxxxxxx
ptg = ptgselect.strip().split('g')[-1]
return contig,ptg
#Function Call and Collect Title for Each rows
a['data'].apply(lambda Name: ExtractContig(Name))您可以存储并执行进一步的分析。本例中的输出为:
0 (93, 000037l)
1 (94, 000039l)
2 (95, 000043l)
3 (96, 000196l)
4 (96, 000060l)
5 (97, 000083l)
6 (97, 000083l)
7 (98, 000117l)
8 (98, 000005l)
9 (99, 000123l)
10 (99, 000123l)
11 (99, 0001232)
12 (99, 0001233)
Name: data, dtype: objecthttps://stackoverflow.com/questions/67607050
复制相似问题