2016-10-05 7 views
3

私は3つのリストを持っており、それらをデータフレームに結合したいと思います。各データフレームはリストの要素です。リストからデータフレームを作成する

3つのリスト(ldは値112とnummericです)

ld <- 112 

# 3 lists 
or <- as.list(rep(0, 8)) 
thetax <- lapply(0:7, function(x) ld * cos (x * pi/4)) 
thetay <- lapply(0:7, function(x) ld * sin (x * pi/4)) 

がここにありますが、data.frame

df3 <- data.frame(or, thetax, thetay) 

にそれらを結合する私の試みである私は、これは非常にされるべきだと思いますシンプルで基本的ですが、私はそれをすることはできません。

これは数時間の回答を探していて、さまざまなことを試していますが、これまでのところ何も動作していないようで、実行できません。

+0

'ld'は表示されません。 – akrun

+0

あなたの例はFUNのエラー(X [[i]]、...)に失敗しました。これはおそらく 'data.frame(または= unlist(または)、thetax = unlist(thetax)、thetay = unlist :オブジェクト 'ld'が見つかりません。 - 'ld'を提供する必要があります。 – jakub

+0

これらはリストにする必要がありますか?私はあなたがベクトルの代わりにリストを扱っている理由を見ることができません。ベクトルはより速く、より敏感です。 – rosscova

答えて

4

リストの列を使用してdata.frameを作成できないという事実は、長年の煩わしさです。好みの順に、あなたのいずれかを行うことができ

  • 代わりtibbleパッケージから使用data_frame

    tibble::data_frame(or, thetax, thetay) 
    
  • ディメンションを持つリストを作成し、それをデータフレームに変換します(David Arenburgの提案)。

    data.frame(cbind(or, thetax, thetay)) 
    
  • その後、リストの列を追加します。

    df3 <- data.frame(1:8)[,FALSE] 
    df3$or <- or 
    df3$or <- thetax 
    df3$or <- thetay 
    
  • データフレームを作るためにstructureを使用してください。

    structure(
        list(or, thetax, thetay), 
        class = "data.frame", 
        row.names = .set_row_names(8) 
    ) 
    
+0

リストからdata.frame列を簡単に作成する方法については、私の答えを参照してください。 –

+0

Nevermind、@David Arenburgは、これがデータ内のリストを生成すると私に指摘しました。frames ... –

+0

もしOPがそれらをリストとして保持したいのであれば、 'data.frame(cbind(or、thetax、thetay))'を実行すればいいと思います。なぜこれを最初に 'data.frame'に変換するのか理解できません。 –

2

私は何かが欠けていることかもしれないが、私は、これはベクトルの代わりに、リストとして働くだろうと思います。これはあなたのために働くのですか、または私は目標から離れていますか?

x <- 0:7 
ld <- 112 
or <- rep(0, 8) 
thetax <- ld * cos (x * pi/4) 
thetay <- ld * sin (x * pi/4) 
df3 <- data.frame(or, thetax, thetay) 
+0

はい、リストの代わりにベクトルで動作します(これもベクトルbtwです)。しかし、彼らがリストを持っている問題 –

+0

はい、問題は私がリストを持っているということです –

+0

よし。十分に公正: – rosscova

1

あなたはすでに回答を受け入れていますが、リストからdata.frameを簡単に作成することはできません。 あなたの例を使用する簡単な方法は次のとおりです。

ld <- 112 
or <- as.list(rep(0, 8)) 
thetax <- lapply(0:7, function(x) ld * cos (x * pi/4)) 
thetay <- lapply(0:7, function(x) ld * sin (x * pi/4)) 

df <- as.data.frame(do.call("cbind",list(or, thetax, thetay))) 
df 

    V1   V2   V3 
1 0   112   0 
2 0  79.19596  79.19596 
3 0 6.858022e-15   112 
4 0  -79.19596  79.19596 
5 0   -112 1.371604e-14 
6 0  -79.19596 -79.19596 
7 0 -2.057407e-14   -112 
8 0  79.19596 -79.19596 
+0

そして今楽しい部分チェックの結果のために。 'str(df)'を実行してください。 –

+0

おっと、私の悪いです。修正をありがとう! –

+0

2番目の考えでは、OPが実際に望んでいるのは多分、 –

関連する問題