2017-01-11 50 views
-2

私は8208行のデータフレームをたくさん持っており、それぞれを432行の19個のデータフレームに分割したいと考えています。私は、次の機能が割り当てられている:データフレームを等分に分割する

splitter <- function(x) { 
a <- x[1:432,] 
b <- x[433:864,] 
c <- x[865:1296,] 
d <- x[1297:1728,] 
e<- x[1729:2160,] 
f <- x[2161:2592,] 
g <- x[2593:3024,] 
h <- x[3025:3456,] 
i <- x[3457:3888,] 
j <- x[3889:4320,] 
k <- x[4321:4752,] 
l <- x[4753:5184,] 
m <- x[5185:5616,] 
n <- x[5617:6048,] 
o <- x[6049:6480,] 
p <- x[6481:6912,] 
q <- x[6913:7344,] 
r <- x[7345:7776,] 
s <- x[7777:8208,] 
assign(paste0('1',x), a, envir = globalenv()) 
assign(paste0('2',x), b, envir = globalenv()) 
assign(paste0('3',x), c, envir = globalenv()) 
assign(paste0('4',x), d, envir = globalenv()) 
assign(paste0('5',x), e, envir = globalenv()) 
assign(paste0('6',x), f, envir = globalenv()) 
assign(paste0('7',x), g, envir = globalenv()) 
assign(paste0('8',x), h, envir = globalenv()) 
assign(paste0('9',x), i, envir = globalenv()) 
assign(paste0('10',x), j, envir = globalenv()) 
assign(paste0('11',x), k, envir = globalenv()) 
assign(paste0('12',x), l, envir = globalenv()) 
assign(paste0('13',x), m, envir = globalenv()) 
assign(paste0('14',x), n, envir = globalenv()) 
assign(paste0('15',x), o, envir = globalenv()) 
assign(paste0('16',x), p, envir = globalenv()) 
assign(paste0('17',x), q, envir = globalenv()) 
assign(paste0('18',x), r, envir = globalenv()) 
assign(paste0('19',x), s, envir = globalenv())} 

私はデータフレーム上でコードをしようとすると、私はエラーメッセージが出ます:アサインで

エラー(paste0( "1"、x)は、ENVIRを= さらに、警告メッセージ: 割り当て(paste0( "1"、x)、a、envir = globalenv()): 最初の要素のみが使用されます。変数名

+2

データのリストを生成できる 'split'と' rep'の組み合わせに興味があります.frames。グレゴールの答えを[この記事](http://stackoverflow.com/questions/17499013/how-do-i-make-a-list-of-data-frames)で読むと、ビルドと作業に関するヒントが得られますdata.framesのリストを持つ。 – lmo

+0

xはdata.frameであり、 "paste0(1、x)はdata.frameになりますのでエラーになります。データX1、X2などに名前を付けることを意味しますか? – ab90hi

答えて

0

特に各データフレームオブジェクトに名前を割り当てるためのコードで、数値と 'x'の全体を貼り付けます。これは、バイト数と要素の警告のエラーを取得する場所です。あなたの現在のコードに固執したい場合は、paste0("1",x)paste0("df1")に置き換えることができます。

assign(x, value, pos = -1, envir = as.environment(pos),inherits = FALSE, immediate = TRUE)xは次のようにあなたは、単にそれを定義することができ、文字列として渡されることを必要とするので、しかし完全に正直に言うと:あなたのソリューションは、最もエレガント、そしてあなた場合ではありません

assign("df1", a, envir = globalenv())

データのよりランダムな分割を行う必要があります。私は他の方法を提案します。何かが好きです -

splitter<-function(x,groups=10){ 
    dd<-as.data.frame(x) 
    dd$split<-sample(groups,size=nrow(dd),replace=T) 
    for(i in 1:groups){ 
    ddd<-dd[dd$split==i,] 
    assign(paste0("X",i),ddd,envir=globalenv()) 
    } 
} 
splitter(data.set,10) 

あなたはループをなくすことができますが、それはあなたが決定するためのものです。上記のコードに注意してください。データフレームのサイズは正確には等しくないかもしれませんが、行内では等しくなければなりません。

関連する問題