0
votes

Calculer les moyennes pondérées excluant certaines lignes pour chaque ligne à l'aide de données.Table dans R

J'ai essayé d'obtenir une colonne de moyennes pondérées qui exclut certaines lignes pour chaque ligne à l'aide de données.

Dans l'exemple suivant, FIPS est une variable d'identification et l'état est une variable de groupe. Je tiens à calculer la moyenne pondérée de la valeur exclusive des comtés voisins dans un même État. ainsi que dans d'autres États.

Je sais comment la mettre en œuvre mais je suppose qu'il y a une voie plus efficace. Je ne connais pas la manipulation d'aspiration à l'aide de données. Des idées? Merci en avance. xxx


0 commentaires

3 Réponses :


0
votes

Peut-être y a-t-il équivalent data.table code>, voici une solution dans Tidyverse code> xxx pré>

op_val1 code > et op_val2 code> est la sortie après avoir exécuté le pour code> en boucle dans op. p>

DATA STRY> P>

set.seed(920410)
DT <- data.table(FIPS =1:21, STATE = LETTERS[1:2], value=1:3, weight=2:7)
DT[, nbs := list(list(sample(1:21, 3))), by= names(DT)]

for(i in 1:nrow(DT)){
   DT$OP_val1[i] <- sum(DT[FIPS %in% unlist(DT$nbs[i]) & STATE == DT$STATE[i], value*weight])
   DT$OP_val2[i] <- sum(DT[FIPS %in% unlist(DT$nbs[i]) & STATE != DT$STATE[i], value*weight])
}


0 commentaires

0
votes

Voici une option dans data.table code> en la convertissant en un format long avant d'effectuer des jointures: xxx pré>

sortie: p>

    FIPS STATE value weight neighbor_sum_in_the_same_state neighbor_sum_in_other_states
 1:    1     A     1      2                             14                           21
 2:    2     B     2      3                             11                           12
 3:    3     A     3      4                              0                           17
 4:    4     B     1      5                              5                           14
 5:    5     A     2      6                             16                            0
 6:    6     B     3      7                             26                           12
 7:    7     A     1      2                             14                            5
 8:    8     B     2      3                             27                            2
 9:    9     A     3      4                              2                           42
10:   10     B     1      5                              6                           14
11:   11     A     2      6                             12                           26
12:   12     B     3      7                             11                            2
13:   13     A     1      2                             12                           11
14:   14     B     2      3                              5                           24
15:   15     A     3      4                             12                           26
16:   16     B     1      5                             21                           24
17:   17     A     2      6                              4                            5
18:   18     B     3      7                              6                           14
19:   19     A     1      2                             14                            5
20:   20     B     2      3                             11                           12
21:   21     A     3      4                             12                           27
    FIPS STATE value weight neighbor_sum_in_the_same_state neighbor_sum_in_other_states


0 commentaires

0
votes

Merci à vous deux :) Ceux qui aident!

Après avoir essayé diverses méthodes, j'ai écrit le code suivant. Le code suivant calcule la moyenne pondérée des valeurs excluant les comtés voisins dans le même État que dans d'autres États sans utiliser de boucle. xxx


0 commentaires