2016-10-22 6 views
-1

この構造を持つ2行のデータフレームを作成するにはどうすればよいですか?残念ながら、私は正しいヘッダ(titleRow)を作成することはできませんし、私は彼らが後でdata.frameする方法を組み合わせることができますR-ループ内に2行のデータフレームを作成する

dataRowTemp<-numeric(length = 0) 
dataRow<-numeric(length = 0) 
headerRowTemp<-character(length = 0) 
headerRow<-character(length = 0) 

    for (i in 1:150){ 
     X<- i 
     Y<- i+3 
     Calc <- X/Y 
     dataRowTemp <- c(X,Y,Calc) 
     dataRow<-c(dataRow,dataRowTemp) 
     headerRowTemp <- paste(c("X", i),c("Y", i),c("Calc", i),sep='') 
     headerRow<-c(headerRow,headerRowTemp) 
    } 

X1 Y1 Calc1 X2 Y2 Calc2 … Xn Yn Calcn 
1 4 0.25 2 5 0.4  i i+3 i/i+3 

私はこのコードを使用してみましたか?

これを行うにはエレガントで優れた方法がありますか?

+0

正しいヘッダーとはどういう意味ですか?変数名? 'name(df)< - c(" X1 "、" Y1 "...)'を試して、ベクトルからデータフレームを作成するには 'data.frame(a = ...、b = ...など。 ) '。 – symbolrush

答えて

1

各繰り返しで使用する関数を作成します。

myfun <- function(i) { 
    X <- i 
    Y <- i + 3 
    c(X = X, Y = Y, Calc = X/Y) 
} 

反復回数を設定します。

n <- 150 

は(それはあなたが狙う言うことなので)のみ1行の行列に出力を格納し、data.frameにそれを変換するためにmatrix(..., nrow = 1)を使用して、1からnまでの番号に関数を適用します。

mydf <- data.frame(matrix(sapply(seq_len(n), myfun), nrow = 1)) 

反復的にあなたのdata.frameの列に名前を割り当てるためにループでpaste0を使用してください。

names(mydf) <- c(sapply(seq_len(n), function(i) paste0(c('X', 'Y', 'Calc'), i))) 
関連する問題