2

分割したい変数があります...各行は異なりますが、「、」で区切られた2つの文字列式があります。「,」で区切られた 3 つの文字列式。1 つの文字列式。またはまったく何もない

例えば:

     indel
row1 +1C
row2 +1C,+2CC
row3 0
row4 +1C,+2CC,-1C

基本的に私がやりたいことは、可能な 3 つの文字列式のそれぞれに対して 3 つの異なる変数を作成することです。もちろん、一部の行には 2 つ、または 1 つ、またはまったく含まれません。

以下を使用して、最初の 2 つの文字列式に対して 2 つの異なる変数を分割して作成することができました。

mito$indel1 <- sapply(strsplit(as.character(mito$indel),","),function(x) x[1])
mito$indel2 <- sapply(strsplit(as.character(mito$indel),","),function(x) x[2])

もちろん、3 番目の文字列式もあります。一時的な indel2 変数を作成し、これを再度分割して 3 番目の変数を作成することを考えていましたが、上記の R スクリプトを使用する際の問題は、変数が次のように作成されることです。

     indel         Indel1    Indel2
row1 +1C           +1C       NA
row2 +1C,+2CC      +1C       +2CC
row3 0             0         NA
row4 +1C,+2T,-1C   +1C       +2T

これは文字列の 2 番目の「,」に関係していると確信しており、R は混乱しています。しかし、各行の変数全体を編集することなく、これを克服する方法はありますか?

また、運が悪いので次のことを試しました:

mito$indel2 <- sapply(strsplit(sapply(strsplit(as.character(mito$indel),","),function(x) x[2]),","),function(x) x[1])
mito$indel3 <- sapply(strsplit(sapply(strsplit(as.character(mito$indel),","),function(x) x[2]),","),function(x) x[2])

どんな助けでも大歓迎です。

4

2 に答える 2

5

多分splitstackshapeパッケージ:

library(splitstackshape)
dat <- read.table(text="+1C
+1C,+2CC
0
+1C,+2CC,-1C", header=FALSE)

splitstackshape:::read.concat(dat[, 1], "var", ",")

##  var_1 var_2 var_3
## 1   +1C            
## 2   +1C  +2CC      
## 3     0            
## 4   +1C  +2CC   -1C

2番目の基本的な方法ですが、@ Matthew'sははるかに優れたアプローチです:

dat2 <- strsplit(as.character(dat[, 1]), ",")
lens <- sapply(dat2, length)
max(lens)
do.call(rbind, lapply(dat2, function(x) {
    x[max(lens)  + 1] <- NA
    x
}))[, -c(max(lens) + 1)]

##      [,1]  [,2]   [,3] 
## [1,] "+1C" NA     NA   
## [2,] "+1C" "+2CC" NA   
## [3,] "0"   NA     NA   
## [4,] "+1C" "+2CC" "-1C"
于 2014-01-30T21:04:14.070 に答える