Retrait/maintien des colonnes spécifiques basés sur leur contenu dans R

0

La question

df:Il y a en réalité des milliers de fois, les variantes et les Id

     variant1 variant2 variant3 variant4
ID1   0/0         0/0      0/0     0
ID2   0/0         0/0      0/0     0
ID3   0/0         0/0      1/1     0
ID4   0/0         0/0      0/0     1
ID5   0/1         0/0      0/0     0

Résultat escompté:

     variant1 variant2 variant3 variant4


ID3   0/0         0/0      1/1     0
ID4   0/0         0/0      0/0     1
ID5   0/1         0/0      0/0     0

J'aimerais ne garder que les lignes si ils ont 0/1, 1/1 ou 1 en eux.

J'ai essayé dt[grepl(0/1", df),] pour chaque itération, mais il ne semble pas fonctionner.

Est-il une base de R ou de données.table façon de faire cela?

data.table r subset
2021-11-22 17:04:15
1

La meilleure réponse

1

Nous pouvons utiliser if_any à partir de dplyr

library(dplyr)
dt %>%
    filter(if_any(everything(), ~ . %in% c("0/1", "1/1", "1")))

-sortie

    variant1 variant2 variant3 variant4
ID3      0/0      0/0      1/1        0
ID4      0/0      0/0      0/0        1
ID5      0/1      0/0      0/0        0

Ou à l'aide de base R

dt[ Reduce(`|`, lapply(dt, `%in%`, c("0/1", "1/1", "1"))),]

-sortie

    variant1 variant2 variant3 variant4
ID3      0/0      0/0      1/1        0
ID4      0/0      0/0      0/0        1
ID5      0/1      0/0      0/0        0

La même option peut être utilisée data.table

library(data.table)
setDT(dt)[dt[, Reduce(`|`, lapply(.SD, `%in%`, c("0/1", "1/1", "1")))]]

données

dt <- structure(list(variant1 = c("0/0", "0/0", "0/0", "0/0", "0/1"
), variant2 = c("0/0", "0/0", "0/0", "0/0", "0/0"), variant3 = c("0/0", 
"0/0", "1/1", "0/0", "0/0"), variant4 = c("0", "0", "0", "1", 
"0")), row.names = c("ID1", "ID2", "ID3", "ID4", "ID5"), class = "data.frame")
2021-11-22 17:16:10

Merci de prendre le temps de répondre, cela a très bien fonctionné. Quel est le "|" en fonction de Réduire veux dire? N' ".SD" dans les données.le tableau dire s'appliquent à toute la table?
tacrolimus

@tacrolimus L' | est OU de l'exploitant. Il vérifie elementwise OU dans chaque vecteur à partir de la liste de sortie de lapply et retourne un vecteur unique de VRAI/FAUX. c'est à dire si il y a une seule VRAIE dans la même position, elle renvoie TRUE ou FALSE autrement. 2) .SD - sous-ensemble de données.table. Si l'on ne spécifie pas quoi que ce soit dans .SDcolsil va prendre l'ensemble des colonnes
akrun

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................