Je travaillais avec un df consolidé et l'utilisais summarise(n = count(var))
pour comprendre les doublons. Ensuite, j'ai obtenu cet appel d'objet x
:
n.x n.freq
1 001121011522 1
2 001121711014 1
3 001121711015 1
4 001121711722 1
5 001121711723 1
6 001131811722 1
Je sais qu'il n.freq
va de 1 à 6, donc je veux saisir uniquement ceux qui sont supérieurs ou égaux à 2:
y <- x %>% filter(n$freq >= 2)
Mais j'ai ceci :
Error: Column `n` must be a 1d atomic vector or a list
Call `rlang::last_error()` to see a backtrace
J'ai donc vérifié sa structure et j'ai obtenu ceci:
> str(x)
'data.frame': 485843 obs. of 1 variable:
$ n:'data.frame': 485843 obs. of 2 variables:
..$ x : Factor w/ 485843 levels "001121011522",..: 1 2 3 4 5 6 7 8 9 10 ...
..$ freq: int 1 1 1 1 1 1 1 1 1 1 ...
Il semble donc qu'il y ait un df à l'intérieur d'un autre comme je peux le comprendre. Je veux savoir comment extraire le deuxième (intérieur) df pour l'utiliser.
[MISE À JOUR] : en utilisant dput(head(x, 20))
j'ai obtenu :
"ABC253478", "ABC983659", "ABC654911", "ABC882310",
..... # there were at least 100 rows of results
"ABC665892", "ABC441276", "ABC906138", "ABC679967"
), class = "factor"), freq = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L)), row.names = c(NA,
20L), class = "data.frame")), row.names = c(NA, 20L), class = "data.frame")
Il a obtenu d'être quelque chose Amuck avec ces données ... mais nous allons voir si je peux essayer de reproduire est suffisamment. (Au départ : pas parfaitement, mais nous n'avons pas encore assez d'informations pour être en mesure d'améliorer autant.)
Quelques exemples de données, écrits manuellement pour se moquer de ce que je pense que vos lignes manquantes sont :
x <- structure(
list(n = structure(
list(x = structure(c(3L, 7L, 6L, 2L, 10L, 9L, 1L, 8L, 4L, 5L),
.Label = c("112916", "116806", "118489", "146802", "154999",
"157333", "170238", "183345", "194348", "194384"),
class = "factor"),
freq = c(2L, 1L, 3L, 1L, 2L, 3L, 3L, 1L, 2L, 1L)),
class = "data.frame", row.names = c(NA, -10L) ) ),
class = "data.frame", row.names = c(NA, -10L)
)
str(x)
# 'data.frame': 10 obs. of 1 variable:
# $ n:'data.frame': 10 obs. of 2 variables:
# ..$ x : Factor w/ 10 levels "112916","116806",..: 3 7 6 2 10 9 1 8 4 5
# ..$ freq: int 2 1 3 1 2 3 3 1 2 1
Cela ne reproduit pas votre erreur :
str( x %>% filter(n$freq >= 2) )
# 'data.frame': 6 obs. of 1 variable:
# $ n:'data.frame': 6 obs. of 2 variables:
# ..$ x : Factor w/ 10 levels "112916","116806",..: 3 6 10 9 1 4
# ..$ freq: int 2 3 2 3 3 2
Peut-être que cela fonctionnera pour vous à la place ?
str( subset(x, n$freq >= 2) )
# 'data.frame': 6 obs. of 1 variable:
# $ n:'data.frame': 6 obs. of 2 variables:
# ..$ x : Factor w/ 10 levels "112916","116806",..: 3 6 10 9 1 4
# ..$ freq: int 2 3 2 3 3 2
Malheureusement, cela peut fonctionner pour vous, mais a pour effet d'aplatir la base de données (sans intention) :
str( x[ x$n$freq >= 2, ] )
# 'data.frame': 6 obs. of 2 variables:
# $ x : Factor w/ 10 levels "112916","116806",..: 3 6 10 9 1 4
# $ freq: int 2 3 2 3 3 2
Il apparaît que ce cadre imbriqué est assez simple à démêler :
str( x[[1]] )
# 'data.frame': 10 obs. of 2 variables:
# $ x : Factor w/ 10 levels "112916","116806",..: 3 7 6 2 10 9 1 8 4 5
# $ freq: int 2 1 3 1 2 3 3 1 2 1
Essayons donc de remplacer le cadre imbriqué par un cadre "normal":
xflat <- x[[1]]
str( filter(xflat, freq >= 2) )
# 'data.frame': 6 obs. of 2 variables:
# $ x : Factor w/ 10 levels "112916","116806",..: 3 6 10 9 1 4
# $ freq: int 2 3 2 3 3 2
str( subset(xflat, freq >= 2) )
# 'data.frame': 6 obs. of 2 variables:
# $ x : Factor w/ 10 levels "112916","116806",..: 3 6 10 9 1 4
# $ freq: int 2 3 2 3 3 2
str( xflat[ xflat$freq >= 2, ] )
# 'data.frame': 6 obs. of 2 variables:
# $ x : Factor w/ 10 levels "112916","116806",..: 3 6 10 9 1 4
# $ freq: int 2 3 2 3 3 2
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots