2016-04-01 138 views
1

私は列を分割しようとしています。私のデータフレーム(menuDは)私はこれをしなかったので、column1の中の数字を分割したい警告:結果の列の数は、ベクトルの長さの倍数ではありません(arg 1)

Column1 
1|3|4|5 
4|5|6|7 

のようなものです。

menuD <- data.frame (do.call('rbind', strsplit(as.character(myCmenu$myFile.menudata), '|', fixed = TRUE))) 

Iこの

col1 | col2 | col3 | col4 
    1 | 3 | 4 | 5 
    4 | 5 | 6 | 7 

のようなものです期待される結果を得た。しかし、私は、私が知りたいのです

> Warning message: 
In rbind(c("", "164200", "", "167", "108", "112", "116", "120"), : 
    number of columns of result is not a multiple of vector length (arg 1) 

R

から、この警告メッセージが表示されました。この効果に私のデータをしました?すべてのデータが正しく分離されていますか?提供された例に基づい

+0

あなたが与えてくれた例は私のために働いていますか? –

+1

元のデータセットの要素数は、各行で同じではない場合があります。 – akrun

答えて

5

、いずれかcSplit

library(splitstackshape) 
cSplit(menuD, "Column1", "|") 
# Column1_1 Column1_2 Column1_3 Column1_4 
#1:   1   3   4   5 
#2:   4   5   6   7 

またはseparate

library(tidyr) 
separate(menuD, Column1, into = paste0("col", 1:4)) 

またはread.table/read.csvtidyrから使用することができます。

read.table(text=menuD$Column1, sep="|", fill=TRUE, header=FALSE) 

しかし、OPのポストでの警告は|数の少ない「列1」の要素があるかもしれないことを示しています。その場合は、cSplitまたは最後のオプションが機能するはずです。

+0

編集akrunありがとう。私は今、最初のオプションを試しています。最後のオプションは、私のdata.frameのデータ型を変更するのだろうか? –

+0

@RayanSp因子列を使用する場合、 'read.table(text = as.character(menuD $ Column1)、sep =" | "、fill = TRUE、header = FALSE、stringsAsFactors = FALSE)を使用できます。 'cSplit'には、デフォルトでクラスを変換するオプションがあります。 – akrun

+0

read.tableは絶対に遅く、まだ実行中です(私が試した以前の方法は数秒かかりました)。 –

関連する問題