3 votes

comment sélectionner les noms de lignes et les lignes pour toute non-concordance trouvée dans un cadre de données de lignes ?

J'ai un cadre de données comme celui-ci dans R

df <- data.frame(V1=c("L", "L", "P", "P"), V2=c("M", "M", "M" , "M"), V3=c("X", "X", "X", "X" ), V4=c( "V","V","V","V"))

Je voudrais sous-évaluer ce cadre de données sur la base des non-concordances trouvées par ligne et créer deux tableaux différents comme suit

df1 
  V1 V2 V3 V4
1  L  M  X  V
2  L  M  X  V

df2
V1 V2 V3 V4
1 P  M  X  V
2 P  M  X  V

Je sais que cela peut être fait par split(df, df$V1) mais j'aimerais savoir s'il existe un moyen plus "automatique" pour Je n'ai pas besoin de spécifier les cols qui ne correspondent pas. Merci !

7voto

Onyambu Points 16644

En base R, vous pourriez utiliser :

split(df, do.call(paste, df))

$`L M X V`
  V1 V2 V3 V4
1  L  M  X  V
2  L  M  X  V

$`P M X V`
  V1 V2 V3 V4
3  P  M  X  V
4  P  M  X  V

7voto

GKi Points 6744

Vous pouvez utiliser df directement dans split (Merci à @27--9 pour le commentaire !)

split(df, df)
#$L.M.X.V
#  V1 V2 V3 V4
#1  L  M  X  V
#2  L  M  X  V
#
#$P.M.X.V
#  V1 V2 V3 V4
#3  P  M  X  V
#4  P  M  X  V

Ou utilisez-le avec interaction sur split :

split(df, interaction(df))
#$L.M.X.V
#  V1 V2 V3 V4
#1  L  M  X  V
#2  L  M  X  V
#
#$P.M.X.V
#  V1 V2 V3 V4
#3  P  M  X  V
#4  P  M  X  V

3voto

Wimpel Points 3380

A data.table L'option est

library(data.table)
split(setDT(df), by = names(df))

# $L.M.X.V
#    V1 V2 V3 V4
# 1:  L  M  X  V
# 2:  L  M  X  V
# 
# $P.M.X.V
#    V1 V2 V3 V4
# 1:  P  M  X  V
# 2:  P  M  X  V

1voto

Ronak Shah Points 24715

dplyr option -

library(dplyr)
df %>% group_by(across()) %>% group_split()

# A tibble: 2 x 4
#  V1    V2    V3    V4   
#  <chr> <chr> <chr> <chr>
#1 L     M     X     V    
#2 L     M     X     V    

#[[2]]
# A tibble: 2 x 4
#  V1    V2    V3    V4   
#  <chr> <chr> <chr> <chr>
#1 P     M     X     V    
#2 P     M     X     V

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X