Je me demande dans Jusqu'à présent, voici ce que je fais ce que je fais, en supposant que les données Et si je veux toutes les lignes où j'en ai 7 1 et disons seulement 1 dans d2a1.var et d3a1.var je fais ce qui suit p> Ceci renvoie la résultat attendu et est assez rapide. Toutefois, lorsqu'il s'agit de plusieurs conditions, il s'agit de nombreuses saisies et beaucoup de données data.Table code> Quel est le moyen le plus efficace ou le plus propre de sélectionner des lignes en fonction de la survenue de certaines valeurs de colonne.
Par exemple, dans une table de données à 7 colonnes, chaque valeur étant 1 ou 0, je veux toutes les lignes où il y a exactement 2 valeurs de 1 et 5 valeurs de 0 (1 représentant "présence" et 0 "absence").
.Table code> créations. Y a-t-il un moyen plus rapide, plus propre et plus compact de réaliser cela? P> p>
3 Réponses :
Nous pouvons utiliser le où p> .sdcols code> en spécifiant les colonnes d'intérêt. Boucle via le sous-ensemble de données.Table (
.sd code>) Créer une liste
de code> de logique
vecteur code> et
réduit code> Un seul logique
vecteur code> avec
et code>
Y a-t-il un moyen plus rapide, plus propre et plus compact de la réalisation de cela? p>
faire des requêtes distinctes et la rurdition comme vous le faites est probablement la plus simple. p>
Vous pouvez simplifier chaque requête en utilisant
remplacer code> et joindre la syntaxe: p>
xxx pré> (ce code n'est pas testé car les données de l'OP n'est pas facilement reproductible.) p>
Vous pouvez probablement simplifier plus loin comme ... p>
xxx pré> concernant la fonction
subit code> pour sous-ensemble / Semi-Join, vous pouvez le modifier pour répondre à vos besoins en fonction de réponses à Effectuer une jointure semi-jointure avec données.Table p>
EDIT: OH DROITE, suivez la réponse de @ Chinsoon, vous pouvez également vous rbind Premier: P>
subit(rbindlist(list( replace(vec0, names(vec0), 1), replace(vec0, c("D2A1.var", "D3A1.var"), 1) )))
Une autre option à l'aide de Set Tkey CODE>:
DT <- fread("D2A1.var D2B3.var D3A1.var D4A3.var D5B3.var H2A3.var H4A4.var MA_ancestor.var
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
0 0 0 0 0 1 0 1
0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 1")
"Par exemple, dans une table de données à 7 colonnes, chaque valeur étant 1 ou 0, je veux toutes les lignes où il y a exactement 2 valeurs de 1 et 5 valeurs de 0." Je ferais juste
réduire ("+", .sd) == 2 code> et utilisez-le pour sous-ensemble.