4

複数の行の各列に同じ文字列がある 2 つの列を持つ長いリストがありました。そのため、使用pasteして連結してから、連結の一意のセットとその頻度を返すために-使用していました。setDT

ここで、連結を逆にしたいと思います。

私は試した:

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

ただし、2 番目のコラム-では、文字列内に複数の 's が含まれることがありました。

これを回避するには、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
4

2 に答える 2

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)

マトリックス「マット」が作成されると、結果を元のマトリックスにバインドできます。

于 2016-05-18T16:03:17.130 に答える