Comment supprimer les valeurs en double d'un seul élément de colonne en fonction d'une autre colonne

oignon

J'ai des données où j'ai un élément d'intérêt (111) dans une colonne. Mes données ressemblent à ceci:

pcp2 <- data.frame(A = c(rep(111, 4), rep(222, 5), rep(111,5), 
        rep(222,5)),B= c(rep(1,9), rep(2,10))) 

     A  B
1   111 1
2   111 1
3   111 1
4   111 1
5   222 1
6   222 1
7   222 1
8   222 1
9   222 1
10  111 2
11  111 2
12  111 2
13  111 2
14  111 2
15  222 2
16  222 2
17  222 2
18  222 2
19  222 2

Je veux réduire la totalité de la seule variable 222 et laisser tous les 111 intacts dans mes données en fonction des identifiants de la colonne B comme suit:

     A  B
1   111 1
2   111 1
3   111 1
4   111 1
5   222 1
6   111 2
7   111 2
8   111 2
9   111 2
10  111 2
11  222 2

Tout ce que j'ai pu trouver qui est proche réduit toutes les variables (111 et 222).

library(data.table)
dat <- as.data.table(pcp2, key = "B")
data <- dat[, by = key(dat)][!duplicated(A == "222")]

comme suit:

   A    B
1 111   1
2 222   2

J'ai joué avec diverses itérations de ce code et d'autres, mais d'autres choses que j'ai essayées viennent de ramener mes données à deux lignes ou de réduire à la fois 111 et 222. Cela ne serait pas suffisant:

   A  B
1 111 1
2 222 2
3 111 2
4 222 2

Quelqu'un a-t-il des conseils sur la façon dont vous maintiendriez le 111 et réduiriez le 222 dans une colonne en fonction d'une autre colonne comme l'exemple (B dans ce cas)? Je sais que d'autres exemples sont similaires, mais aucun ne semble donner la possibilité de spécifier de ne pas réduire une variable particulière dans une colonne tout en réduisant la ou les autres.

avid_useR

Voici une dplyrsolution utilisant slice. Cette solution ne suppose pas que les autres valeurs de Aautre que 111sont 222:

library(dplyr)

pcp2 %>%
  group_by(B, A) %>%
  slice(if(any(A == "111")) 1:n() else 1)

Alternativement en utilisant data.table:

library(data.table)

setDT(pcp2)[, .I[if(any(A=="111")) 1:.N else 1], by = c("B", "A")][,.SD, .SDcols = A:B]

Résultat:

# A tibble: 12 x 2
# Groups:   B, A [5]
       A     B
   <dbl> <dbl>
 1   111     1
 2   111     1
 3   111     1
 4   111     1
 5   222     1
 6   111     2
 7   111     2
 8   111     2
 9   111     2
10   111     2
11   222     2
12   333     2

      A B
 1: 111 1
 2: 111 1
 3: 111 1
 4: 111 1
 5: 222 1
 6: 111 2
 7: 111 2
 8: 111 2
 9: 111 2
10: 111 2
11: 222 2
12: 333 2

Les données:

pcp2 <- data.frame(A = c(rep(111, 4), rep(222, 5), rep(111,5), 
                         rep(222,5), rep(333, 5)), B= c(rep(1,9), rep(2,10), rep(2, 5))) 

Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.

En cas d'infraction, veuillez [email protected] Supprimer.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

TOP liste

  1. 1

    J'ai besoin de savoir si ces deux phrases sont les mêmes en programmation

  2. 2

    Javascript indiquant "impossible de définir la propriété 'innerHTML' sur null"

  3. 3

    Nextcloud avec Docker: impossible de créer ou d'écrire dans le répertoire de données

  4. 4

    La taille de la forme n'est pas égale à la taille de la cellule du tableau et ajuste le texte à l'intérieur de la forme

  5. 5

    Trouver l'intersection et l'union de deux rectangles

  6. 6

    Comment changer la couleur de la police dans R?

  7. 7

    Empêcher l'allocation de mémoire dans la génération de combinaison récursive

  8. 8

    Référencement des assemblys de structure .net 4.7 dans la solution .net core 2

  9. 9

    Compter combien de fois un nombre apparaît dans un tableau aléatoire

  10. 10

    Pourquoi utiliser Asyncio ne réduit pas le temps d'exécution global en Python et n'exécute pas les fonctions simultanément?

  11. 11

    Comment convertir une chaîne en tuple en utilisant `reads`?

  12. 12

    java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver

  13. 13

    comment afficher un bouton au-dessus d'un autre élément ?

  14. 14

    Création d'un nouvel objet d'une classe avec un nouveau nom en cliquant sur un bouton dans java swing

  15. 15

    comment supprimer "compte de connexion google" à des fins de développement - actions sur google

  16. 16

    Restauration de la sauvegarde de la base de données SQL Server sur la version inférieure

  17. 17

    Créer un graphique à barres avec une fréquence relative / à partir d'un objet de table dans R

  18. 18

    Création d'un rappel python pour une fonction C à partir d'une DLL avec un tampon char.

  19. 19

    java.lang.NoClassDefFoundError: org / springframework / data / repository / config / BootstrapMode

  20. 20

    comment le contrôle de tableau javascript devrait-il être

  21. 21

    impossible d'ouvrir un nouvel onglet dans react, ajoute localhost: 3000 sur le lien?

chaudétiquette

Archive