2017-02-06 13 views
1

データフレームのすべての列を、他の列の値のベクトル(リスト)を含む新しい列にマージする必要があります。このRデータフレーム列をベクトルとして新しい列にマージする

n = c(2, 3, 5) 
s = c(3,3,5) 
b = c(1,1,1) 
df = data.frame(n, s, b) 

    n s b 
1 2 3 1 
2 3 3 1 
3 5 5 1 

そして、私は私にこのような何かを与えるコマンドを実行したいような何か:

n s b v 
1 2 3 1 [2,3,1] 
2 3 3 1 [3,3,1] 
3 5 5 1 [5,5,1] 

基本的には、このような何か

t(as.numeric(df[1,1:3])) 
     [,1] [,2] [,3] 
[1,] 2 3 1 

は、私は1つのために欲しいものを私を取得します行を追加する方法を知ることはできません。私は様々な成功を収めていない様々なapply関数を試しました。

ありがとうございました。

+0

約 'df $ v < - apply(df、1、function(x)paste(x、collapse = '、'))' – Gopala

+0

ありがとうございます。以前はペーストで試してみましたが、ベクトル/数字のリストではなく文字列を作成します。そして私は数値が必要です。 – ilijaluve

+0

'paste'の代わりに' list'を使用しますか? – Gopala

答えて

2

それはあなたがデータフレームに行列を追加することができますほとんど知られて機能です:

> df[4] <- data.matrix(df) 
> df 
    n s b V4.n V4.s V4.b 
1 2 3 1 2 3 1 
2 3 3 1 3 3 1 
3 5 5 1 5 5 1 
> df[4] 
    V4.n V4.s V4.b 
1 2 3 1 
2 3 3 1 
3 5 5 1 
> df[4,1] # note that the 4th "column" actually a list needs to be addresses as a whole: 
[1] NA # the 
> df[4][ 1, ] 
    n s b 
[1,] 2 3 1 

あなたが個々の要素を抽出したい場合は、まず「[[」で抽出する必要があります。

どう
> df[[4]][ , 1 ] 
[1] 2 3 5 
+0

ありがとう、これについて知りませんでした。 – ilijaluve

+0

古いコードで表示されることがあります。行列の列は別々には提供されないので、 'print'出力はちょっと混乱するかもしれません。ほとんどのコーダーが今使っていないセンスがあるのですが、リストのリストとしてこれらをコード化するよりもコーディング戦略としてもっと安定していると思います。 –

関連する問題