2015-01-19 16 views
6

Ich habe versucht, dies für eine Weile herauszufinden, und dachte, ich würde hier fragen.Split camelCase Spaltennamen

Say I einen Datenrahmen wie folgt haben:

df <- data.frame(participant = 1:6, group = c("adult", "adult", "child", "child", "NSS", "NSS"), RegProto = c(2, 3, 4, 2, 4, 3), RegInt = c(2, 3, 4, 6, 6, 5), RegDistant = c(3, 3, 4, 5, 4, 5), IrregProto = c(4, 5, 3, 4, 3, 1), IrregInt = c(4, 4, 4, 4, 4, 4), IrregDistant = c(4, 5, 6, 8, 9, 1)) 

Das Problem bei diesem Datenrahmen ist, dass jeder zwei Variablen enthält: eine Variable, deren Werte entweder Reg oder Irreg, sind eine andere, deren Werte Proto, Int oder Distant. Was ich tun möchte, ist diese Spalten zu teilen und die Tabelle lang zu machen, vorzugsweise unter Verwendung tidyr. Ich dachte, ich könnte es so machen.

Das macht was ich will bis separate(). Ich bekomme eine Fehlermeldung, dass die Werte nicht geteilt wurden, aber keine weiteren Vorschläge, warum dies der Fall sein könnte. Ich bin neu in Regex, also vermute ich, dass das Problem da sein muss, aber ich kann nicht herausfinden, wie die richtige Syntax sein könnte.

Antwort

9

können Sie diese Regex verwenden:

(?<=.)(?=[A-Z]) 

Dies zeigt die (Länge Null) Position von einem Großbuchstaben gefolgt und von einem beliebigen Zeichen vorangestellt.

Der Befehl:

library(dplyr) 
df %>% 
    gather(index, n, -group, -participant) %>% 
    select(participant, group, index, n) %>% 
    separate(index, into = c("verb", "similarity"), sep = "(?<=.)(?=[A-Z])") 
+0

Dank einer Million. – JoeF