title: convert individual factors (within rows) into individual columns and transfer affiliated numbers over remaining factor
body: <p>I have a data.frame that looks like this:</p>
  
  <pre><code>df &lt;- data.frame(plot=as.factor(rep(c('A','B'), each = 5)), 
                   group=as.factor(c('BO','BO','SM','SM','SM','BO','BO','SM','SM','SM')), 
                   para=c('pH','pH','Co','Cr','Cu','pH','pH','Co','Cr','Cu'), 
                   value=c(7.5,7,80,10,30,6.5,6,50,30,40), 
                   method=c('H2o','Cal','Sal','Sal','Sal','H2o','Cal','Sal1','Sal1','Sal1'))
  
          plot group para value method
      1     A    BO   pH   7.5    H2o
      2     A    BO   pH   7.0    Cal
      3     A    SM   Co  80.0    Sal
      4     A    SM   Cr  10.0    Sal
      5     A    SM   Cu  30.0    Sal
      6     B    BO   pH   6.5    H2o
      7     B    BO   pH   6.0    Cal
      8     B    SM   Co  50.0    Sal1
      9     B    SM   Cr  30.0    Sal1
      10    B    SM   Cu  40.0    Sal1  
  </code></pre>
  
  <p>I would like to convert the factors 'H2o' and 'Cal' into columns and transfer the attributed values across the column 'plot' </p>
  
  <pre><code>df2 &lt;- data.frame(plot=as.factor(c('A','A','A','B','B','B')), 
                        SM=c('Co','Cr','Cu','Co','Cr','Cu'),
                        method=c('Sal','Sal','Sal','Sal1','Sal1','Sal1'),
                        value=c(80,10,30,50,30,40),
                        H2o=c(7.5,7.5,7.5,6.5,6.5,6.5),
                        Cal=c(7,7,7,6,6,6))
  
        plot SM method value H2o Cal
      1    A Co    Sal  80.0 7.5   7
      2    A Cr    Sal  10.0 7.5   7
      3    A Cu    Sal  30.0 7.5   7
      4    B Co   Sal1  50.0 6.5   6
      5    B Cr   Sal1  30.0 6.5   6
      6    B Cu   Sal1  40.0 6.5   6
  </code></pre>
  
  <p>I will try to give you a representative sample of the real dataframe using ´dput´.</p>
  
  <pre><code>    dput(emshort[1:30,])
  
      structure(list(plot = structure(c(365L, 365L, 365L, 365L, 365L, 
      365L, 365L, 365L, 365L, 365L, 365L, 365L, 365L, 365L, 365L, 365L, 
      365L, 365L, 366L, 366L, 366L, 366L, 366L, 366L, 366L, 366L, 366L, 
      366L, 366L, 366L), .Label = c("1005734", "102335", "1091002", 
      "1091105", "1091106", "10941051", "10941052", "10941053", "10941054", 
      "1191102", "1204702", "1291018", "1305735", "1391115", "13941151",  
      "1713004", "1713005", "1713006", "1791013", "1791124", "1791137", 
      "8218105", "8218106", "8218107", "8218108", "8218109", "8218110", 
      "8218111", "8218112", "8218113", "8218114", "8218115", "8218116", 
      ...
      "LiesbergProfil P3", "WinR160", "WinR161", "WinR162", "WinR163", 
      "WinR164", "WinR165", "WinR166", "WinR167", "WinR169", "WinR170", 
      "WinR174", "WinR181"), class = "factor"), group = structure(c(1L, 
      1L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 1L, 1L, 3L, 3L, 3L, 3L, 3L, 3L, 
      3L, 1L, 1L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 1L, 1L, 3L), .Label = c("BOKW", 
      "NAEHR", "SM"), class = "factor"), para = structure(c(24L, 24L, 
      5L, 6L, 8L, 9L, 21L, 23L, 34L, 24L, 24L, 5L, 6L, 8L, 9L, 21L, 
      23L, 34L, 24L, 24L, 5L, 6L, 8L, 9L, 21L, 23L, 34L, 24L, 24L, 
      5L), .Label = c("Al", "As", "B", "Ca", "Cd", "Co", "Corg", "Cr", 
      "Cu", "Fe", "Hg", "Humus", "K", "KAKeff", "KAKpot", "Kalk", "Mg", 
      "Mn", "Mo", "Na", "Ni", "P", "Pb", "pH", "S", "Sb", "Se", "Skelett", 
      "Sn", "Tl", "Ton", "U", "V", "Zn"), class = "factor"), value = c(7.5, 
       7, 0.81, 10, 33, 15, 23, 23, 50, 7.3, 7.9, 0.81, 11, 30, 13, 
      27, 20, 49, 7.5, 7, 1.03, 10, 34, 23, 27, 30, 78, 8.2, 7.5, 0.67
      ), method = structure(c(5L, 4L, 11L, 11L, 11L, 11L, 11L, 11L, 
      11L, 4L, 5L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 5L, 4L, 11L, 
      11L, 11L, 11L, 11L, 11L, 11L, 5L, 4L, 11L), .Label = c("", "allgemeine                         Bodeneigenschaften - Aufschluss, 0.1 M Bariumchlorid +    2M Triethanolamin", 
      "allgemeine Bodeneigenschaften - Aufschluss, Bariumchlorid", 
      "allgemeine Bodeneigenschaften - Aufschluss, Calciumchlorid", 
      "allgemeine Bodeneigenschaften - Aufschluss, H2O", "allgemeine    Bodeneigenschaften - Aufschluss, HCl", 
      "allgemeine Bodeneigenschaften - Aufschluss, Königswasser", "allgemeine Bodeneigenschaften - Aufschluss, Nasschemische Oxidation mit K2Cr2O7 Titration", 
       "Nährstoffe - Aufschluss, 2M Salpetersäure (VBBo total)", "Nährstoffe   - Aufschluss, Königswasser", 
      "Schwermetalle - Aufschluss, 2M Salpetersäure (VBBo total)", 
      "Schwermetalle - Aufschluss, Königswasser"), class = "factor")),         row.names =       c(NA, 30L), class = "data.frame")´
  </code></pre>
  
  <p>(I have drastically cut the plot levels.)</p>
  
  <pre><code>    dfrep
          plot   group  para  value                                                  method
      1  7595050  BOKW   pH  7.50            allgemeine Bodeneigenschaften -    Aufschluss, H2O
      2  7595050  BOKW   pH  7.00 allgemeine Bodeneigenschaften - Aufschluss, Calciumchlorid
      3  7595050    SM   Cd  0.81  Schwermetalle - Aufschluss, 2M Salpetersäure (VBBo total)
      4  7595050    SM   Co 10.00  Schwermetalle - Aufschluss, 2M Salpetersäure (VBBo total)
      5  7595050    SM   Cr 33.00  Schwermetalle - Aufschluss, 2M Salpetersäure (VBBo total)
      6  7595050    SM   Cu 15.00  Schwermetalle - Aufschluss, 2M Salpetersäure (VBBo total)
      7  7595050    SM   Ni 23.00  Schwermetalle - Aufschluss, 2M Salpetersäure (VBBo total)
      8  7595050    SM   Pb 23.00  Schwermetalle - Aufschluss, 2M Salpetersäure (VBBo total)
      9  7595050    SM   Zn 50.00  Schwermetalle - Aufschluss, 2M Salpetersäure (VBBo total)
      10 7595050  BOKW   pH  7.30 allgemeine Bodeneigenschaften - Aufschluss, Calciumchlorid
      11 7595050  BOKW   pH  7.90            allgemeine Bodeneigenschaften - Aufschluss, H2O
      12 7595050    SM   Cd  0.81  Schwermetalle - Aufschluss, 2M Salpetersäure (VBBo total)
      13 7595050    SM   Co 11.00  Schwermetalle - Aufschluss, 2M Salpetersäure (VBBo total)
      14 7595050    SM   Cr 30.00  Schwermetalle - Aufschluss, 2M Salpetersäure (VBBo total)
      15 7595050    SM   Cu 13.00  Schwermetalle - Aufschluss, 2M Salpetersäure (VBBo total)
      16 7595050    SM   Ni 27.00  Schwermetalle - Aufschluss, 2M Salpetersäure (VBBo total)
      17 7595050    SM   Pb 20.00  Schwermetalle - Aufschluss, 2M Salpetersäure (VBBo total)
      18 7595050    SM   Zn 49.00  Schwermetalle - Aufschluss, 2M Salpetersäure (VBBo total)
      19 7595059  BOKW   pH  7.50            allgemeine Bodeneigenschaften - Aufschluss, H2O
      20 7595059  BOKW   pH  7.00 allgemeine Bodeneigenschaften - Aufschluss, Calciumchlorid
      21 7595059    SM   Cd  1.03  Schwermetalle - Aufschluss, 2M Salpetersäure (VBBo total)
      22 7595059    SM   Co 10.00  Schwermetalle - Aufschluss, 2M Salpetersäure (VBBo total)
      23 7595059    SM   Cr 34.00  Schwermetalle - Aufschluss, 2M Salpetersäure (VBBo total)
      24 7595059    SM   Cu 23.00  Schwermetalle - Aufschluss, 2M Salpetersäure (VBBo total)
      25 7595059    SM   Ni 27.00  Schwermetalle - Aufschluss, 2M Salpetersäure (VBBo total)
      26 7595059    SM   Pb 30.00  Schwermetalle - Aufschluss, 2M Salpetersäure (VBBo total)
      27 7595059    SM   Zn 78.00  Schwermetalle - Aufschluss, 2M Salpetersäure (VBBo total)
      28 7595059  BOKW   pH  8.20            allgemeine Bodeneigenschaften - Aufschluss, H2O
      29 7595059  BOKW   pH  7.50 allgemeine Bodeneigenschaften - Aufschluss, Calciumchlorid
      30 7595059    SM   Cd  0.67  Schwermetalle - Aufschluss, 2M Salpetersäure (VBBo total)
  </code></pre>
  
  <p>What I would need now is to keep those rows with string 'Schwermetalle' and the others of group 'BOKW' and 'NAEHR' to go into columns. Similar to what I described in the former example, but now I have an extra group level that needs to be transferred into a seperate column. </p>
  
  <p>I have tried adapting the code from @akrun as follows:</p>
  
  <pre><code>    emnew&lt;-
      emshort  %&gt;%
      filter(!str_detect(method, 'Schwermetalle')) %&gt;% #here detect rows with  other methods too (eg.königswasser)
      select(-group, -para) %&gt;%
      pivot_wider(names_from = method, values_from = value) %&gt;%
      right_join(emshort %&gt;%
                    filter(str_detect(method, 'Schwermetalle'))) %&gt;%
      select(names(emshort), everything()) %&gt;%
      rename(SM = para) %&gt;%
     select(-group)
  </code></pre>
  
  <p>I get following Error message:</p>
  
  <pre><code>    Error: Column 6 must be named.
      Use .name_repair to specify repair.
      Run `rlang::last_error()` to see where the error occurred.
      In addition: Warning message:
     Values in `value` are not uniquely identified; output will contain list-cols.
      * Use `values_fn = list(value = list)` to suppress this warning.
   * Use `values_fn = list(value = length)` to identify where the duplicates arise
     * Use `values_fn = list(value = summary_fun)` to summarise duplicates 
  </code></pre>
  
  <p>Do I need to rename an extra column?</p>