2016-08-13 24 views
0

複数のボリューム列にのみ作成したデータフレームがあり、データフレームにあるtestという総列を作成したいとします。私がちょうどtest <- ...を設定した場合、下のコードは動作しますが、左にsummary_transposed_no_time$を追加すると、コードはデータフレームに追加されないようです。合計行総和列をデータフレームにR

このコードをどのように進化させて、すべての列から1列目のテストを作成し、後で別のテスト列(おそらくはtest2と呼ばれる)を作成できるようにすることもできますすべての列マイナス2列の合計 - (彼らは大会にコードが実行されるたびに名前を付けるに変更できるよう)私はハード列の位置ではなく、列名をコーディングすることができますので、私はここに

w <- ncol(summary_transposed_no_time) 
summary_transposed_no_time$test <- apply(summary_transposed_no_time[,c(1:w)], 1, sum) 
それらを含めていません

summary_transposed_no_timeの例:

postal_dist_a | postal_dist_b | postal_dist_c 
------------- | ------------- | ------------- 
20   | 25   | 15 
25   | 40   | 23 
31   | 32   | 19 
24   | 39   | 17 
37   | 19   | 26 
summary_transposed_no_time内

望ましい結果の列は:

postal_dist_a | postal_dist_b | postal_dist_c | test 
------------- | ------------- | ------------- | ------------- 
20   | 25   | 15   | 60 
25   | 40   | 23   | 88 
31   | 32   | 19   | 82 
24   | 39   | 17   | 80 
37   | 19   | 26   | 82 
+0

例は再現できません。 https://stackoverflow.com/help/mcveを参照してください –

答えて

1

あなたはreprocucible例を提供する必要があります。 しかし、あなたの質問が本当にrowsumsを行う方法についてだけであれば、私はむしろ組み込みの関数rowSumsを使用したいと思います。あなたのコードは次のようになります:

set.seed(1) 
# I recreate a table more or less like yours 
summary_transposed_no_time=data.frame(matrix(rnorm(1000),ncol=5)) 
n=ncol(summary_transposed_no_time) 

# Test that contains the rowsum 
summary_transposed_no_time$test=rowSums(summary_transposed_no_time) 

# test1 rowsum minus column 1 
summary_transposed_no_time$testm1=rowSums(summary_transposed_no_time[,2:n]) 
# test2 rowsum minus column 2 
summary_transposed_no_time$testm2=rowSums(summary_transposed_no_time[,c(1,3:n)]) 
#test_i minus column i 
i=3 
summary_transposed_no_time$testmi=rowSums(summary_transposed_no_time[,c(1:n)][,-i]) 

#check on first line : 
sum(summary_transposed_no_time[1,1:n])==summary_transposed_no_time$test[1] 
sum(summary_transposed_no_time[1,2:n])==summary_transposed_no_time$testm1[1] 
sum(summary_transposed_no_time[1,c(1,3:n)])==summary_transposed_no_time$testm2[1] 
sum(summary_transposed_no_time[1,c(1:2,4:n)])==summary_transposed_no_time$testmi[1] 
+0

ありがとうございましたArault、私は提供したラインを実行しています:summary_transposed_no_time $ testm1 = rowSums(summary_transposed_no_time [、1:n])ncolカウントと印刷前後ステップ。 ncolsによって印刷された数字は、testm1を作成する前の132から133になりましたが、testm1という列は見つかりませんでした。私は何が間違っているのか分からない?私はあなたが作成したテーブルを走らせて、その中でtestm1を見ることができますか? –

+0

これは奇妙なことですが、summary_transposed_no_time $ testm1 [1,1]を実行するとどうなりますか?列の数が変更された場合、何かが作成されているはずです。 columの名前を確認できない場合は、colnames(summary_transposed_no_time)を試してください。あなたのコメントでは、関数のsummary_transposed_no_time [、** 1 **:n]ではなく、summary_transposed_no_time [、** 2 **:n]という小さなエラーが表示されます。 – Arault

+0

もう一度、[1,1]と[、1:n]の両方がtestm1を 'colnames()'の結果に表示しますが、フレームを開くと目に見えません。 SASの開発者として、私は新しいフィールドがフレームのRHSにあるという前提を立てました。それを言って、私はすべての列を見てきましたが、確かにそこにはありませんか? –

0

df内のすべての列に対して "total_"を作成する方法が見つかりました。 total_1は、すべての列の合計から1番目の列、2番目の列の合計から2番目の列を除いたものなどです。

n=ncol(summary_transposed_no_time) 

for (h in 1:ncol(summary_transposed_no_time)) { 

    summary_transposed_no_time[,paste0("total_",h)] <- rowSums(summary_transposed_no_time[,c(1:n)][,-h]) 
    m = ncol(summary_transposed_no_time) 
    print(paste("added in a total columns for region", h, "so the column count is now : ",m)) 

} # end for (h in 1:nrow(filtered_data_contents)){