2017-10-04 4 views
0

L'entrée ci-dessous représente l'exemple de jeu de lignes et de colonnes. J'ai besoin d'effectuer des calculs mathématiques différents par itérations sur ces rangées par rangée et de les stocker dans un cadre de données.Résolution de l'expression mathématique dans les boucles et stockage dans une base de données avec 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

Pour la première ligne que je dois effectuer les calculs ci-dessous

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 

Pour la deuxième ligne aussi je dois effectuer les mêmes calculs que première et aussi pour le reste des lignes

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 

la sortie du résultat que l'on devrait être dans le format suivant

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

Quelqu'un peut-il s'il vous plaît me aider à résoudre ce problème pour l'itération pour résoudre pour un grand nombre de lignes et de colonnes

+0

Semblable à la multiplication matricielle. – Gregor

+0

Pouvez-vous m'aider à résoudre ce problème. Je ne suis pas en mesure de comprendre comment faire –

+1

Essayez d'améliorer votre question ... Quel est le modèle de ce que vous devez calculer dans chaque rangée? dire ... quand vous dites "Pour la première rangée, j'ai besoin d'effectuer les calculs ci-dessous 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 ", pourquoi la ligne A saute B3 et B4? Vous avez besoin de A. B. et C. dans la même rangée? De quoi exactement avez-vous besoin? Combien de lignes attendez-vous? Vous avez besoin de toutes les combinaisons possibles? S'il vous plaît essayez de clarifier votre question – Thai

Répondre

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 

Vous pourriez probablement faire une fonction qui génère les colonnes de yy si vous pouvez décrire la logique derrière quels termes sont ajoutés pour chaque rangée. C'est aussi très flexible. La matrice utilisée est tous les 1 et les 0 parce que vos combinaisons linéaires sont 1 * A1 + 1 * B1 + 1 * B2 + 0 * B3 + .... Vous pouvez utiliser des nombres autres que 1 pour d'autres combinaisons linéaires.