2013-06-07 1 views
1

나는 다음과 같은 dataframe (DF1)이 있습니다R - 2 개의 구분 기호가있는 문자열을 분리하고 중복을 제거한 다음 프레임을 다시 넣으시겠습니까?

someName someMOD someValue someID someSymbol 
FGR8 A(P);A(Z);M(O),A(Z),P(L) 4234 1 X 
MZ66 C(P),M(O);M(O),A(Z),P(L) 434 23 Y 
O161 A(P);A(Z);M(O),A(Z),P(L) 23 32 Z 
O001 A(P),A(Z);M(O),A(P);M(O) 5 5 W 
O0019 Z(P);A(Z),M(O),A(Z),Z(P) 34345 3 K 

내가 다음 ','로 someMOD 열을 분할 좋아하고 것을 ';' ... 그런 다음 중복 된 값을 제거하고 문자열을 쉼표와 함께 다시 넣습니다. 먼저 strsplit을 사용하여 unlist를 사용하고 세미콜론 분리 기호를 사용하여 중복을 제거한 다음 중복을 제거하지만 쉼표로 다시 가져 오는 방법은 무엇입니까? 어떤 도움이 정말 감사합니다

someName someMOD someValue someID someSymbol 
FGR8 A(P),A(Z),M(O),P(L) 4234 1 X 
MZ66 C(P),M(O),A(Z),P(L) 434 23 Y 
O161 A(P),A(Z),M(O),P(L) 23 32 Z 
O001 A(P),A(Z),M(O) 5 5 W 
O0019 Z(P),A(Z),M(O) 34345 3 K 

semicolony <- unlist(strsplit(df1$someMOD,',')) 
commay <- unlist(strsplit(semicolony$someMOD,';')) 
commay <- commay[!duplicated(commay[,1]),] 
commay = paste(commay, collapse=',') 

원하는 출력. 감사합니다. 내가 이것을 언급해야

답변

2

시도 뭔가 같은 :

SplitFunction <- function(x) { 
    b <- unlist(strsplit(x, '[;,]')) 
    c <- b[!duplicated(b)] 
    return(paste(c, collapse=",")) 
} 

SplitFunctionV <- Vectorize(SplitFunction) 
df$someMOD <- SplitFunctionV(df$someMOD) 
3
x <- df1$someMOD 
x2 <- strsplit(x, ",") 
x3 <- lapply(x2,FUN=function(x) unlist(strsplit(x,";"))) 
x4 <- lapply(x3, unique) 
x5 <- unlist(lapply(x4,paste,collapse=",")) 

lapply 년대를 반복하지 않도록하기 위해 적은 단계로 결합하지만, 원래의 질문의 단계를 (주요 문제가있는 unlist의 초기 사용했다)에 따라하고 싶어 할 수있다.