我有以下数据框(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
非常感谢任何帮助。
答案 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)