R - 用2个分隔符分割字符串,删除重复并将帧放回去?

时间:2013-06-07 05:37:22

标签: r duplicates delimiter

我有以下数据框(df1):

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,然后再使用分号分隔符,然后删除重复项,但是如何用逗号将其放回去?

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

期望的输出

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

非常感谢任何帮助。

2 个答案:

答案 0 :(得分: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,但是想要遵循原始问题中的步骤(主要问题是{{1}的初始使用})。

答案 1 :(得分:2)

尝试类似:

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

SplitFunctionV <- Vectorize(SplitFunction)
df$someMOD <- SplitFunctionV(df$someMOD)