2014-05-05 10 views
5

Sto cercando aiuto su come dividere la colonna dei nomi complessi in 2 colonne per nome e cognome.R stringa di testo diviso in ultimo e primi elementi

df <- data.frame(PREFIX=c("A_B","A_C","A_D","B_A","A_B_C","B_D_E","C_B_A","B_A"), 
     VALUE=c(1,2,3,4,5,6,7,8)) 

Di seguito produce la prima parte del compito, ma non riuscivo a capire come selezionare l'ultimo elemento quando ho modello diverso per la stringa restante

# split PREFIX into new columns 
df$name1 = as.character(lapply(strsplit(as.character(df$PREFIX), split="_"), "[", 1)) 

risposta

6

È possibile utilizzare tail per afferrare l'ultimo elemento:

df$name2 = as.character(lapply(strsplit(as.character(df$PREFIX), split="_"), 
         tail, n=1)) 
df 
# PREFIX VALUE name1 name2 
# 1 A_B  1  A  B 
# 2 A_C  2  A  C 
# 3 A_D  3  A  D 
# 4 B_A  4  B  A 
# 5 A_B_C  5  A  C 
# 6 B_D_E  6  B  E 
# 7 C_B_A  7  C  A 
# 8 B_A  8  B  A 
1

È possibile anche utilizzare un "avido" espressione regolare:

cbind(df, do.call(rbind, strsplit(as.character(df$PREFIX), "_|_.*_"))) 
# PREFIX VALUE 1 2 
# 1 A_B  1 A B 
# 2 A_C  2 A C 
# 3 A_D  3 A D 
# 4 B_A  4 B A 
# 5 A_B_C  5 A C 
# 6 B_D_E  6 B E 
# 7 C_B_A  7 C A 
# 8 B_A  8 B A