2017-10-04 8 views
0

以下輸入是許多行和列的示例數據集。我需要通過對這些行進行迭代來執行不同的數學計算,並將其存儲在數據框中。在循環中求解數學表達式並使用R存儲在數據框中

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. 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 

任何人都可以請幫我解決這個問題迭代求解大量的行和列

+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 

你也許可以使產生的yy列的功能,如果你能描述邏輯背後爲每行添加條款。這也非常靈活。由於你的線性組合是1 * A1 + 1 * B1 + 1 * B2 + 0 * B3 + ...,因此使用的矩陣全爲1和0。對於其他線性組合,您可以使用除1以外的其他數字。