usar sheet mutate meaning como cheat r dplyr

sheet - filtrando data.frame basado en row_number()



tidyr r (3)

ACTUALIZACIÓN: dplyr se ha actualizado desde que se hizo esta pregunta y ahora funciona como el OP quería

Estoy tratando de obtener la segunda a la séptima línea en un data.frame usando dplyr .

Estoy haciendo esto:

require(dplyr) df <- data.frame(id = 1:10, var = runif(10)) df <- df %>% filter(row_number() <= 7, row_number() >= 2)

Pero esto arroja un error.

Error in rank(x, ties.method = "first") : argument "x" is missing, with no default

Sé que podría hacer fácilmente:

df <- df %>% mutate(rn = row_number()) %>% filter(rn <= 7, rn >= 2)

Pero me gustaría entender por qué mi primer intento no funciona.


Aquí hay otra forma de hacer el filtrado basado en el número de fila en una tubería.

df <- data.frame(id = 1:10, var = runif(10)) df %>% .[2:7,] > id var 2 2 0.28817 3 3 0.56672 4 4 0.96610 5 5 0.74772 6 6 0.75091 7 7 0.05165


En realidad, la función de división de dplyr está hecha para este tipo de subconjunto:

df %>% slice(2:7)

(Llego un poco tarde a la fiesta, pero pensé que agregaría esto para futuros lectores)


La función row_number() no devuelve simplemente el número de fila de cada elemento y, por lo tanto, no se puede utilizar como desee:

• ''row_number'': equivalente a ''rank (ties.method = "first")''

En realidad, no está diciendo lo que quiere el row_number de row_number . En tu caso:

df %>% filter(row_number(id) <= 7, row_number(id) >= 2)

funciona porque id está ordenado, por lo que row_number(id) es 1:10 . No sé qué row_number() evalúa en este contexto, pero cuando se llama por segunda vez, a dplyr han acabado las cosas para alimentarlo y obtienes el equivalente de:

> row_number() Error in rank(x, ties.method = "first") : argument "x" is missing, with no default

Ese es tu error allí mismo.

De todos modos, esa no es la forma de seleccionar filas.

Simplemente necesita subíndicar df[2:7,] , o si insiste en tuberías en todas partes:

> df %>% "["(.,2:7,) id var 2 2 0.52352994 3 3 0.02994982 4 4 0.90074801 5 5 0.68935493 6 6 0.57012344 7 7 0.01489950