2017-10-04 5 views
0

以下の入力は、多くの行と列のサンプルデータセットです。私はこれらの行ごとに反復によって異なる数学計算を実行し、それをデータフレームに格納する必要があります。私は第二行に対して数式をループで解くとデータフレームに格納するR

A. A1 + B1 + B2   + C2 + C3 + C4 
B. A1 + B1 + B2 + B3  + C2 + C3 + C4 +C5 
C. A1 + B1 + B2 + B3 +B4 + C2 + C3 + C4 +C5 +C6 

以下の計算を実行する必要がある最初の行のための

A1 B1 B2 B3 B4 C1 C2 C3 C4 C5 C6 C7 2 6 4 4 2 3 3 4 4 1 1 6 4 2 3 5 3 2 5 5 6 2 3 0 6 2 4 6 4 22 6 5 6 3 5 77 6 3 5 7 5 0 6 5 7 4 5 6 6 4 6 8 0 6 7 0 8 5 6 5 6 5 3 9 6 7 7 6 9 6 7 4 5 6 2 4 7 6 7 7 1 2 7 5

も私は最初のものとして、また残りの行に対して同じ計算を実行する必要が

A. A1 + B1 + B2   + C2 + C3 + C4 
B. A1 + B1 + B2 + B3  + C2 + C3 + C4 +C5 
C. A1 + B1 + B2 + B3 +B4 + C2 + C3 + C4 +C5 +C6 

一つは次の形式でなければならない結果の出力

A B c 
23 28 31 
25 32 38 
29 38 47 
32 43 53 
31 44 50 
36 51 64 

誰もがあなたがロジックを記述することができます場合は、おそらくyyの列を生成する関数を作ることができ、私は、行と列

+0

音が行列乗算のようです。 – Gregor

+0

これを解決するのを手伝ってもらえますか?私はそれを行う方法を理解することができません –

+1

あなたの質問を改善してください...各行で計算する必要があるもののパターンは何ですか?意味...あなたが言うとき "最初の行については、私は以下の計算を実行する必要があります A. A1 + B1 + B2 + C2 + C3 + C4 B. A1 + B1 + B2 + B3 + C2 + C3 + C4 + C5 C.A1 + B1 + B2 + B3 + B4 + C2 + C3 + C4 + C5 + C6 "、なぜ行AはB3とB4をスキップしますか?同じ行にA. B.とC.が必要ですか?正確に何が必要ですか?何行目を期待していますか?すべての組み合わせが必要ですか? – Thai

答えて

1
xx = read.table(text = "A1 B1 B2 B3 B4 C1 C2 C3 C4 C5 C6 C7 
2 6 4 4 2 3 3 4 4 1 1 6 
4 2 3 5 3 2 5 5 6 2 3 0 
6 2 4 6 4 22 6 5 6 3 5 77 
6 3 5 7 5 0 6 5 7 4 5 6 
6 4 6 8 0 6 7 0 8 5 6 5 
6 5 3 9 6 7 7 6 9 6 7 4 
5 6 2 4 7 6 7 7 1 2 7 5", header = T) 

xx = as.matrix(xx) 

# Create a matrix to multiply by 
yy = matrix(0, nrow = ncol(xx), ncol = 3) 
colnames(yy) = c("A", "B", "C") 
rownames(yy) = colnames(xx) 

# A. A1 + B1 + B2   + C2 + C3 + C4 
# B. A1 + B1 + B2 + B3  + C2 + C3 + C4 +C5 
# C. A1 + B1 + B2 + B3 +B4 + C2 + C3 + C4 +C5 +C6 
#   A1 B1 B2 B3 B4 C1 C2 C3 C4 C5 C6 C7 
yy[, 1] = c(1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0) 
yy[, 2] = c(1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0) 
yy[, 3] = c(1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0) 

xx %*% yy 
#  A B C 
# [1,] 23 28 31 
# [2,] 25 32 38 
# [3,] 29 38 47 
# [4,] 32 43 53 
# [5,] 31 44 50 
# [6,] 36 51 64 
# [7,] 28 34 48 

の数が多いために解決するための反復のために、この問題を解決する助けてください各行ごとにどのような用語が追加されるのかを示します。これも非常に柔軟です。線形結合が1 * A1 + 1 * B1 + 1 * B2 + 0 * B3 + ...であるため、使用される行列はすべて1と0です。他の線形結合には1以外の数字を使用できます。