2014-05-05 13 views
5

Szukam pomocy, jak podzielić kolumnę złożonych nazw na 2 kolumny dla imion i nazwisk.R Podziel ciąg tekstowy na ostatnie i pierwsze elementy.

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)) 

Poniższa produkuje pierwszą część zadania, ale nie mogłem dowiedzieć się, jak wybrać ostatni element, kiedy mam inny wzór dla pozostałych ciąg

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

Odpowiedz

6

Można wykorzystać tail chwycić ostatni element:

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

można też użyć "zachłanny" wyrażenia regularnego:

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 
Powiązane problemy