<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://taiwanbeetles.net/domains/taiwanbeetles.net/index.php?action=history&amp;feed=atom&amp;title=Scripts%2FDemultiplexing_Script</id>
	<title>Scripts/Demultiplexing Script - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://taiwanbeetles.net/domains/taiwanbeetles.net/index.php?action=history&amp;feed=atom&amp;title=Scripts%2FDemultiplexing_Script"/>
	<link rel="alternate" type="text/html" href="https://taiwanbeetles.net/domains/taiwanbeetles.net/index.php?title=Scripts/Demultiplexing_Script&amp;action=history"/>
	<updated>2026-10-25T20:41:51Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://taiwanbeetles.net/domains/taiwanbeetles.net/index.php?title=Scripts/Demultiplexing_Script&amp;diff=266&amp;oldid=prev</id>
		<title>Admin at 07:49, 17 June 2026</title>
		<link rel="alternate" type="text/html" href="https://taiwanbeetles.net/domains/taiwanbeetles.net/index.php?title=Scripts/Demultiplexing_Script&amp;diff=266&amp;oldid=prev"/>
		<updated>2026-06-17T07:49:45Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 08:49, 17 June 2026&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;syntaxhighlight lang=&quot;r&quot;&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;pre&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;#==============================================================================&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;#==============================================================================&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# PREPARING DEMULTIPLEXING FILE&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;# PREPARING DEMULTIPLEXING FILE&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l146&quot;&gt;Line 146:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 146:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;write.table(demultiplex, file=&amp;quot;June2026_demultiplex_658.txt&amp;quot;, quote=FALSE, sep=&amp;quot;,&amp;quot;, row.names=FALSE, col.names=FALSE)&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;write.table(demultiplex, file=&amp;quot;June2026_demultiplex_658.txt&amp;quot;, quote=FALSE, sep=&amp;quot;,&amp;quot;, row.names=FALSE, col.names=FALSE)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;syntaxhighlight&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;pre&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
	<entry>
		<id>https://taiwanbeetles.net/domains/taiwanbeetles.net/index.php?title=Scripts/Demultiplexing_Script&amp;diff=265&amp;oldid=prev</id>
		<title>Admin: Created page with &quot;&lt;syntaxhighlight lang=&quot;r&quot;&gt; #============================================================================== # PREPARING DEMULTIPLEXING FILE #==============================================================================  # We need the file with five columns going like this: # 1. Sample name # 2. fwd primer barcode (= tag) # 3. rev primer barcode (= tag) # 4. fwd primer sequence # 5. rev primer sequence # The text file SHOULD NOT have column names!  # FILES NEEDED TO PREPA...&quot;</title>
		<link rel="alternate" type="text/html" href="https://taiwanbeetles.net/domains/taiwanbeetles.net/index.php?title=Scripts/Demultiplexing_Script&amp;diff=265&amp;oldid=prev"/>
		<updated>2026-06-17T07:47:59Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;&amp;lt;syntaxhighlight lang=&amp;quot;r&amp;quot;&amp;gt; #============================================================================== # PREPARING DEMULTIPLEXING FILE #==============================================================================  # We need the file with five columns going like this: # 1. Sample name # 2. fwd primer barcode (= tag) # 3. rev primer barcode (= tag) # 4. fwd primer sequence # 5. rev primer sequence # The text file SHOULD NOT have column names!  # FILES NEEDED TO PREPA...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;syntaxhighlight lang=&amp;quot;r&amp;quot;&amp;gt;&lt;br /&gt;
#==============================================================================&lt;br /&gt;
# PREPARING DEMULTIPLEXING FILE&lt;br /&gt;
#==============================================================================&lt;br /&gt;
&lt;br /&gt;
# We need the file with five columns going like this:&lt;br /&gt;
# 1. Sample name&lt;br /&gt;
# 2. fwd primer barcode (= tag)&lt;br /&gt;
# 3. rev primer barcode (= tag)&lt;br /&gt;
# 4. fwd primer sequence&lt;br /&gt;
# 5. rev primer sequence&lt;br /&gt;
# The text file SHOULD NOT have column names!&lt;br /&gt;
&lt;br /&gt;
# FILES NEEDED TO PREPARE THE DEMULTIPLEX FILE:&lt;br /&gt;
# 1. List of primers (Primers_list.txt): name, tag, sequence as separate columns&lt;br /&gt;
# 2. Plate plan for reverse primers (Primers_plate.txt): import from Excel including name of columns (1-12) and rows (A-H)&lt;br /&gt;
# 3. Plate plan for all PCR plates in one file: import by Ctrl+C from Excel including name of columns (1-12) and rows (A-H)&lt;br /&gt;
&lt;br /&gt;
# Set working directory with all files ready&lt;br /&gt;
setwd(&amp;quot;D:/Projects/Taiwan Leaf Litter Barcoding/LabWork_Kaohsiung/___SEQUENCING/2026_June&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
### ----------------- READING FILES&lt;br /&gt;
&lt;br /&gt;
# Read list of primers&lt;br /&gt;
# (should be a tab-delimited text file or Excel sheet)&lt;br /&gt;
primerNames &amp;lt;- read.table(&amp;quot;Primers_list.txt&amp;quot;, header=TRUE, sep=&amp;quot;\t&amp;quot;)&lt;br /&gt;
primerNames &amp;lt;- read.table(file=&amp;quot;clipboard&amp;quot;, header=TRUE, sep=&amp;quot;\t&amp;quot;)&lt;br /&gt;
primerNames&lt;br /&gt;
&lt;br /&gt;
# Read plan of rev primers plate&lt;br /&gt;
# (should be a tab-delimited text file or Excel sheet)&lt;br /&gt;
primersPlate &amp;lt;- read.table(&amp;quot;Primers_plate.txt&amp;quot;, header=TRUE, sep=&amp;quot;\t&amp;quot;)&lt;br /&gt;
primersPlate &amp;lt;- read.table(file=&amp;quot;clipboard&amp;quot;, header=TRUE, sep=&amp;quot;\t&amp;quot;, row.names = 1)&lt;br /&gt;
colnames(primersPlate) &amp;lt;- c(1:12)&lt;br /&gt;
primersPlate&lt;br /&gt;
&lt;br /&gt;
# Read plate maps from Excel&lt;br /&gt;
# (with stripe numbers in the first row, and stripe position in first column, &lt;br /&gt;
# plate name in upper left corner, all plates one after another without empty &lt;br /&gt;
# rows)&lt;br /&gt;
allPlates &amp;lt;- read.table(file=&amp;quot;clipboard&amp;quot;, header=FALSE, sep=&amp;quot;\t&amp;quot;)&lt;br /&gt;
numberPlates &amp;lt;- nrow(allPlates)/9&lt;br /&gt;
PlateFirstRows &amp;lt;- ((0:(numberPlates-1))*9)+1&lt;br /&gt;
plateNames &amp;lt;- allPlates[PlateFirstRows,1]&lt;br /&gt;
plateList &amp;lt;- list()&lt;br /&gt;
for (i in 1:numberPlates){&lt;br /&gt;
  plate &amp;lt;- allPlates[(PlateFirstRows[i]+1):(PlateFirstRows[i]+8),2:13]&lt;br /&gt;
  plateList[[i]]&amp;lt;-plate&lt;br /&gt;
  names(plateList)[i]&amp;lt;-plateNames[i]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Read list of plates and their forward primers&lt;br /&gt;
# (from Excel sheet)&lt;br /&gt;
List_of_Plates &amp;lt;- read.table(file=&amp;quot;clipboard&amp;quot;, header=TRUE, sep=&amp;quot;\t&amp;quot;)&lt;br /&gt;
List_of_Plates658 &amp;lt;- List_of_Plates[List_of_Plates$Length==658,] &lt;br /&gt;
List_of_Plates407 &amp;lt;- List_of_Plates[List_of_Plates$Length==407,]&lt;br /&gt;
List_of_Plates313 &amp;lt;- List_of_Plates[List_of_Plates$Length==313,]&lt;br /&gt;
&lt;br /&gt;
#Check if names of plates in list and map correspond&lt;br /&gt;
List_of_Plates658[,1] %in% plateNames&lt;br /&gt;
List_of_Plates407[,1] %in% plateNames&lt;br /&gt;
List_of_Plates313[,1] %in% plateNames&lt;br /&gt;
&lt;br /&gt;
### ----------------- PREPARING TABLE &amp;quot;SAMPLE - FWD - REV&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# This part makes a table of sample / fwd primer name / rev primer name for plates &lt;br /&gt;
&lt;br /&gt;
sample_plate_primer = data.frame(matrix(nrow=0, ncol=6))    &lt;br /&gt;
colnames (sample_plate_primer) = c(&amp;quot;rowNo&amp;quot;, &amp;quot;colNo&amp;quot;, &amp;quot;sample&amp;quot;, &amp;quot;plate&amp;quot;, &amp;quot;fwd_primer&amp;quot;, &amp;quot;rev_primer&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# SELECT WHICH PLATES YOU WANT TO USE HERE:&lt;br /&gt;
selectedPlates &amp;lt;- List_of_Plates658&lt;br /&gt;
&lt;br /&gt;
namesOfPlates &amp;lt;- selectedPlates[,1]&lt;br /&gt;
&lt;br /&gt;
row=1&lt;br /&gt;
for (k in 1:nrow(selectedPlates)){&lt;br /&gt;
whichPlate &amp;lt;- which(names(plateList) %in% namesOfPlates[k])&lt;br /&gt;
    for (j in 1:8){ &lt;br /&gt;
    for (i in 1:12){&lt;br /&gt;
      rowNo = j&lt;br /&gt;
      colNo = i&lt;br /&gt;
      sample = plateList[[whichPlate]][j,i]&lt;br /&gt;
      plateNo = plateNames[whichPlate]&lt;br /&gt;
      primer = primersPlate[j,i]&lt;br /&gt;
      sample_plate_primer[row,] = c(rowNo, colNo, sample, plateNo, selectedPlates[k,3], primer)&lt;br /&gt;
      row = row+1&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
sample_plate_primer&lt;br /&gt;
&lt;br /&gt;
# This part keeps only the needed columns and deletes the rows for BLANKS or empty&lt;br /&gt;
# cells (adapt the &amp;quot;BLANK&amp;quot; text if you mark blanks in a different way in the PCR &lt;br /&gt;
# plate plan)&lt;br /&gt;
sample_primers  &amp;lt;-  sample_plate_primer [,c(3,5,6)]&lt;br /&gt;
sample_primers&amp;lt;-sample_primers[!(sample_primers$sample==&amp;quot;&amp;quot;),]&lt;br /&gt;
sample_primers&amp;lt;-sample_primers[!(sample_primers$sample==&amp;quot;BLANK&amp;quot;),]&lt;br /&gt;
sample_primers&amp;lt;-sample_primers[!is.na(sample_primers$sample),]&lt;br /&gt;
&lt;br /&gt;
# sample_primers should be the final list of samples and their fwd and rev primer names&lt;br /&gt;
sample_primers&lt;br /&gt;
nrow(sample_primers)&lt;br /&gt;
&lt;br /&gt;
# checking if all samples are unique (to prevent problems with same sample in multiple plates)&lt;br /&gt;
duplicated(sample_primers[,1])&lt;br /&gt;
which(duplicated(sample_primers[,1]))&lt;br /&gt;
sample_primers[which(duplicated(sample_primers[,1])),1]&lt;br /&gt;
&lt;br /&gt;
# ALTERNATIVE: load the sample-primer table done by yourself&lt;br /&gt;
# format: sample, fwd_primer, rev_primer&lt;br /&gt;
# sample_primers &amp;lt;- read.table(file = &amp;quot;clipboard&amp;quot;, sep = &amp;quot;\t&amp;quot;, header=TRUE)&lt;br /&gt;
&lt;br /&gt;
### ----------------- REPLACING PRIMER NAMES BY PRIMER SEQUENCE AND TAG&lt;br /&gt;
&lt;br /&gt;
# This part reads the tag and primer sequence for each fwd and rev primer for each sample&lt;br /&gt;
# and makes the final demultiplexing table&lt;br /&gt;
&lt;br /&gt;
sample_primers[&amp;quot;fwd_barcode&amp;quot;] &amp;lt;- NA&lt;br /&gt;
sample_primers[&amp;quot;rev_barcode&amp;quot;] &amp;lt;- NA&lt;br /&gt;
sample_primers[&amp;quot;fwd_seq&amp;quot;] &amp;lt;- NA&lt;br /&gt;
sample_primers[&amp;quot;rev_seq&amp;quot;] &amp;lt;- NA&lt;br /&gt;
&lt;br /&gt;
len = length(sample_primers[,1])&lt;br /&gt;
&lt;br /&gt;
for (n in 1:len){&lt;br /&gt;
  searched_fwd_primer &amp;lt;-  sample_primers[n,&amp;quot;fwd_primer&amp;quot;]&lt;br /&gt;
  searched_rev_primer = sample_primers[n,&amp;quot;rev_primer&amp;quot;]&lt;br /&gt;
  primFWD = primerNames[(primerNames$Name==searched_fwd_primer),]&lt;br /&gt;
  primREV = primerNames[(primerNames$Name==searched_rev_primer),]&lt;br /&gt;
  sample_primers[n,&amp;quot;fwd_barcode&amp;quot;]=primFWD[1,&amp;quot;Tag&amp;quot;]&lt;br /&gt;
  sample_primers[n,&amp;quot;rev_barcode&amp;quot;]=primREV[1,&amp;quot;Tag&amp;quot;]&lt;br /&gt;
  sample_primers[n,&amp;quot;fwd_seq&amp;quot;]=primFWD[1,&amp;quot;Basic.Primer.Sequence&amp;quot;]&lt;br /&gt;
  sample_primers[n,&amp;quot;rev_seq&amp;quot;]=primREV[1,&amp;quot;Basic.Primer.Sequence&amp;quot;]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
demultiplex = sample_primers[,c(1,4:7)]&lt;br /&gt;
&lt;br /&gt;
# This is the final demultiplexing file&lt;br /&gt;
demultiplex&lt;br /&gt;
&lt;br /&gt;
### ----------------- EXPORTING DEMULTIPLEXING FILE&lt;br /&gt;
&lt;br /&gt;
# Exporting the file to the txt&lt;br /&gt;
# CHANGE THE FILE NAME as you wish!&lt;br /&gt;
&lt;br /&gt;
write.table(demultiplex, file=&amp;quot;June2026_demultiplex_658.txt&amp;quot;, quote=FALSE, sep=&amp;quot;,&amp;quot;, row.names=FALSE, col.names=FALSE)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>