2016-07-26 1 views
1

この質問は基本的だと思われますが、私は答えを見つけることができませんでした。indecesを参照してdata.frame列を追加する方が良い

data.frameの列を一緒に追加したいのですが、

私は明示的に私は

> df$a + df$b + df$d 
[1] 7 7 7 7 7 

を行うことができ、カラム名を参照し、私にできることindecesを参照することを知っている列1,2を追加したい、と4

df <- data.frame(
    a=rep(1, 5), 
    b=rep(2, 5), 
    c=rep(3, 5), 
    d=rep(4, 5) 
) 

と仮定

> df[1] + df[2] + df[4] 
    a 
1 7 
2 7 
3 7 
4 7 
5 7 

ただし、上記のインデックスオプションでは、data.frame fの名前を書く必要がありますまたは追加するすべての列を選択します。

これらの列を一緒に追加する方法はありますか?

答えて

1

rowSums関数を使用して、列番号のベクトルをdf[, ]に設定して列を参照できます。

rowSums(df[, c(1,2,4)] 
[1] 7 7 7 7 7 
1

またはdata.table内:

dt[, sum := rowSums(.SD), .SDcols = c(1, 2, 4)] 
dt[, sum := rowSums(.SD), .SDcols = c('a', 'b', 'd')] 
1
with(df, a + b + d) 
[1] 7 7 7 7 7 
+1

私の現在の問題には適していませんが、これは知って良いです。 – Warner

1

data.tableを使用して別の解決策:

require(data.table) # Load package 
dt <- data.table(df) # Convert to data.table 
dt[, a + b + d]  # Sum columns 
[1] 7 7 7 7 7 
1

別のオプションは、

Reduce(`+`, df[-3]) 
#[1] 7 7 7 7 7 
です

それとも@PierreLafortune

の変種
df$a + df$b + df$d 
#[1] 7 7 7 7 7 
+1

私は追加に制限されていないので、私は 'Reduce'アプローチが好きです。私は '/'と '* 'を使うこともできます。私はこの機能がどのように機能するのか分かりません。 'Reduce(sum、df [-3])'を実行すると35になりますが、 'Reduce(max、df [-3])'を実行すると4になります。 – Warner

+0

@Warner ' Reduce'と 'sum'はrowwise' sum'の代わりに全体の和を得ます。 – akrun

+0

akrunは、 'Reduce()'のように動作するが、より速いパッケージである可能性が高い関数を知っていますか?私はこの 'Reduce(function(x、y){full_join(x、y)}、masterlist)'のような数百のデータフレームのリストをマージするために 'Reduce'を使用しています。私はこれが少し話題であることは知っていますが、算術演算のために「Reduce」のような働きをする代替案を用意するのはいいかもしれません。 – Warner

関連する問題