我有一个包含两列的长列表,其中我在多行中的每列中都有相同的字符串。因此,我使用paste
使用-
进行连接,然后使用setDT
以及其频率返回唯一的concats集。
现在我想扭转我的连接。
我试过了:
library(splitstackshape)
d5 <- cSplit(d4, 'conc', '-', 'wide')
然而,在我的第二栏中,我有时在字符串中有多个-
。
为了解决这个问题,我希望cSplit只使用第一个-
分隔符。
示例:
conc freq
A-hello 4
A-Hi-there 5
B-HELLO 1
使用上面的cSplit
将返回:
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
答案 0 :(得分:3)
这是另一个想法。通过使用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
答案 1 :(得分:2)
试试这个,也许不像使用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”后,可以将结果压缩到原始矩阵上。