J'ai un grand R data.table
avec une clé multi-colonne, où certaines colonnes de valeur contiennent des NA. Je voudrais supprimer les groupes qui sont entièrement NA dans une ou plusieurs colonnes de valeur, mais conserver le groupe entier dans le cas contraire. Répétez ceci pour chaque colonne de la clé.Comment faire pour supprimer des blocs de NA à partir d'un R data.table
Pour donner un exemple simplifié:
library(data.table)
DT = data.table(
Series = rep(letters[1:12], each = 3),
Id = 1:12,
Value1 = c(1:3, NA, 5:9, rep(NA,3), 1:3, NA, 5:9, rep(NA,3), 1:3, NA, 5:9, rep(NA,3)),
Value2 = c(rep(NA,3), 1:4, NA, 6:9, rep(NA,3), 1:9, 1:9, rep(NA,3)))
DT
Series Id Value1 Value2
1: a 1 1 NA
2: a 2 2 NA
3: a 3 3 NA
4: b 4 NA 1
5: b 5 5 2
6: b 6 6 3
7: c 7 7 4
8: c 8 8 NA
9: c 9 9 6
10: d 10 NA 7
11: d 11 NA 8
12: d 12 NA 9
13: e 1 1 NA
14: e 2 2 NA
15: e 3 3 NA
16: f 4 NA 1
17: f 5 5 2
18: f 6 6 3
19: g 7 7 4
20: g 8 8 5
21: g 9 9 6
22: h 10 NA 7
23: h 11 NA 8
24: h 12 NA 9
25: i 1 1 1
26: i 2 2 2
27: i 3 3 3
28: j 4 NA 4
29: j 5 5 5
30: j 6 6 6
31: k 7 7 7
32: k 8 8 8
33: k 9 9 9
34: l 10 NA NA
35: l 11 NA NA
36: l 12 NA NA
Series Id Value1 Value2
Je voudrais donc laisser tomber:
- Série: a, d, e, h et l
- Ids: 4, 10, 11 et 12
résultat correct devrait ressembler à:
Series Id Value1 Value2
1: b 5 5 2
2: b 6 6 3
3: c 7 7 4
4: c 8 8 NA
5: c 9 9 6
6: f 5 5 2
7: f 6 6 3
8: g 7 7 4
9: g 8 8 5
10: g 9 9 6
11: i 1 1 1
12: i 2 2 2
13: i 3 3 3
14: j 5 5 5
15: j 6 6 6
16: k 7 7 7
17: k 8 8 8
18: k 9 9 9
Series Id Value1 Value2
Ce que je réussi à ce jour:
je peux trouver la série qui sont NA pour Valeur1 comme ceci:
DT[, sum(1-is.na(Value1)) == 0, by = Series][V1 == TRUE]
Et je pourrais même faire
setkey(DT, Series)
DT = DT[DT[, sum(1-is.na(Value)) == 0, by = Series][V1 != TRUE]]
Mais maintenant je me retrouve avec V1 apparaissant dans la table finale.
pourquoi pas seulement 'na.omit (DT)'? – Justin
'na.omit' ne fait que supprimer toutes les NA. Je veux seulement enlever quand le "bloc" entier est NA. Donc dans l'exemple, il n'y a pas de valeur pour m ou z, donc ils devraient être supprimés, mais je ne veux pas laisser tomber les deux NA en série b – Corone
Puis @Arun a votre réponse, mais vous ne devriez pas avoir besoin de 'comme .logical'. – Justin