2017-12-12 29 views
2

354(a1-a354)列のデータフレームを分割しようとしています。 例:しかしとして、(私はカラム名について気にしない)私は一度に1列にそれを使用する場合これは完璧に動作複数の列を一度に分割するR

df1<- extract(df1,1, c("D","M"), "(.)(.)",convert=TRUE) 

:現在、私は次のコードを使用してい

a1 a2 
1 aa aa 
2 bb bb 
3 cc cc 

私は354列を持って、私はそれをループしようとしています。これまでは、関数化してみたので、lapplyで使うことができました。私もfor-loopを試しました。私はいつも エラーを取得:データソースは、辞書

でなければなりませんが、私は次のことをしようとしている:私が試した

colseparator <- function(x) { 
df1<- extract(df1,x, c("D","M"), "(.)(.)",convert=TRUE) 
} 

他の事は私の方法のいずれもが機能していない

for (x in c(7,9,11)){ 
     df1<- extract(df1,x, c("D","M"), "(.)(.)",convert=TRUE) 
    } 

あり、明らかに何か間違っている。 ご協力いただければ幸いです。

答えて

0

いくつかのオプションがあります。一つの方法は、一緒にpasteに行ことgsubを使用して区切り文字を作成し、read.table/read.csv

read.table(text=gsub('(?<=[a-z])(?=[a-z])', ',', do.call(paste, df1), 
      perl = TRUE), header = FALSE, stringsAsFactors=FALSE, sep=',') 

それとも私たちがこんにちは列をループでstrsplitに分割され、その後、rbind

do.call(rbind, lapply(df1, function(x) do.call(rbind, strsplit(x, "(?<=.)", perl = TRUE)))) 
+0

可能性を読んでいましたアクラン! ** **太字 '\t V1 V2 V3 V4 1 AADDEE 2 BBEEFF 3 CCFFGG 'それは6を持っている必要があります、最初のものはソリューションのおかげで働いていた、しかし今では私に次のような出力を与えることを開始しました列はありますが、それは4つしかありません – GWhiz

+0

@ GWhizコメントからはっきりしません。ポストの例は小文字であるようです。今、コメントでは大文字です。定かでない。 – akrun

+0

こんにちはAkrun、大文字のデータのコードを変更しました: 'splitcols < - read.table(text = gsub( '(?<= [AZ])'、 '、'、do.call (ペースト、subsetgeno4)、 のperl = TRUE)、ヘッダ= FALSE、stringsAsFactors = FALSE、9月= '') '私に次の出力を与えた
' V1 V2 V3 V4
1 AADDEE
2 BBEEFF
3 CCFFGG' – GWhiz

関連する問題