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
我有一个包含两列的长列表,其中我在多行的每一列中都有相同的字符串。所以我使用 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