1

次のデータフレーム (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

どんな助けでも本当に感謝しています。

4

2 に答える 2

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

于 2013-06-07T06:15:26.887 に答える
2

次のようなものを試してください:

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

SplitFunctionV <- Vectorize(SplitFunction)
df$someMOD <- SplitFunctionV(df$someMOD)
于 2013-06-07T06:45:07.460 に答える