R cSplit仅使用字符串中的第一个定界符

R cSplit only using first delimiter in string

我有一个包含两列的长列表,其中我在多行的每一列中都有相同的字符串。所以我使用 paste 连接使用 - 然后使用 setDT 到 return 独特的连接集及其频率。

现在我想反转我的连接。

我试过了:

library(splitstackshape)
d5 <- cSplit(d4, 'conc', '-', 'wide')

然而,在我的第二个专栏中,有时字符串中有多个 -

为了解决这个问题,我希望 cSplit 只使用第一个 - 分隔符。

示例:

 conc      freq
 A-hello      4
 A-Hi-there   5
 B-HELLO      1

使用上面的 cSplit 会 return:

freq conc_001  conc_002  conc_003
   4        A     hello        NA
   5        A        Hi     there
   1        B     HELLO        NA

我愿意:

freq conc_001  conc_002
   4        A     hello
   5        A  Hi-there
   1        B     HELLO

试试这个,也许不像使用 csplit 函数那么直接。这种方法的性能相当快。

#Sample Data    
s<-c("A-hello", "A-Hi-there", "B-HELLO")
df<-data.frame(s)

#split the data into 2 parts and assign to new columns in the dataframe.
library(stringr)
mat  <- matrix(unlist(str_split(df$s, "-", n=2)), ncol=2, byrow=TRUE)
dfnew<-as.data.frame(mat, stringsAsFactors = FALSE)

创建矩阵 "mat" 后,可以将结果绑定到原始矩阵。

这是另一个 idea.By 使用 sub 我们将其限制为仅更改字符串的第一个指定分隔符。然后我们使用 cSplit 和新的分隔符。

library(splitstackshape)
df$conc <- sub('-', ' ', df$conc)
cSplit(df, 'conc', ' ', 'wide')
#   freq conc_1   conc_2
#1:    4      A    hello
#2:    5      A Hi-there
#3:    1      B    HELLO