I have two large data frames, the sample below shows what they look like:
Name<-c("ST01","ST02","ST03")
B1<-c(0.01,0.003,0.04)
B2<-c(0.02,0.002,0.02)
B3<-c(0.04,0.008,0.06)
B4<-c(0.08,0.009,0.08)
B5<-c(0.09,0.004,0.05)
df1<-data.frame(Name,B1,B2,B3,B4,B5)
Name A1 A2 A3 A4 A5
1 ST01 0.020 0.040 0.050 0.060 0.08
2 ST02 0.036 0.034 0.054 0.034 0.24
3 ST03 0.140 0.320 0.560 0.780 0.59
Name<-c("ST01","ST02","ST03")
A1<-c(0.02,0.036,0.14)
A2<-c(0.04,0.034,0.32)
A3<-c(0.05,0.054,0.56)
A4<-c(0.06,0.034,0.78)
A5<-c(0.08,0.24,0.59)
df2<-data.frame(Name,A1,A2,A3,A4,A5)
Name B1 B2 B3 B4 B5
1 ST01 0.010 0.020 0.040 0.080 0.090
2 ST02 0.003 0.002 0.008 0.009 0.004
3 ST03 0.040 0.020 0.060 0.080 0.050
I would like to reshape them so that I can use ggplot to plot all the As against Bs and then plot As against Bs for each value, my desired output would be something like this:
Name Value A B
1 ST01 1 0.020 0.010
2 ST01 2 0.040 0.020
3 ST01 3 0.050 0.040
4 ST01 4 0.060 0.080
5 ST01 5 0.080 0.090
6 STO2 1 0.036 0.003
7 STO2 2 0.034 0.002
8 STO2 3 0.054 0.008
9 STO2 4 0.034 0.009
10 STO2 5 0.240 0.004
11 ST03 1 0.140 0.040
12 ST03 2 0.320 0.020
13 ST03 3 0.560 0.060
14 ST03 4 0.780 0.080
15 ST03 5 0.590 0.050
>
I am new to R so not quite if this can be done, or if there is a more appropriate way to shape the data in order to plot. Any help would be appreciated.
You could first merge your datasets using a
left_jointhen reshape to long by utilizing thenames_patternargument ofpivot_longerand the special".value". For thenames_patternargument I use the regex"(.)(.)"to split the column names into two one character strings, e.g."A1"is split in to"A"and"1"where the first part ("A") gives the name of the value column and the second part ("1") is stored as category in the name column ("Value"):