2014-01-27 4 views
0

Я могу попробовать 10 строк из data.frame, как это:Образец кадр данных с dplyr

mtcars[sample(1:32, 10),] 

Что такое синтаксис для этого с dplyr? Это то, что я пробовал:

library(dplyr) 
filter(mtcars, sample(1:32, 10)) 
+0

мое предположение было бы сделать числовой индекс столбца (с mtcars rownames являются строками) и сделать 'фильтр (mtcars, index == sample (1:32, 10)) ', но это не работает. – rawr

+0

Это, по крайней мере, работает: 'filter (mtcars, seq_len (nrow (mtcars))% in% sample (1:32, 10))'. (Поскольку я не очень хорошо знаком с ** dplyr **, и он может предоставить более сжатые/эффективные способы говорить/делать это, я не буду публиковать это как ответ.) –

ответ

1

Я считаю, что вы не действительно «фильтруете» в своем примере, вы просто проверяете ряды.

В hadley's слов здесь цель функции:

фильтра() работает аналогично подмножество() за исключением того, что вы можете дать ему любое количество условий фильтрации, которые соединены вместе с & (не & &, который легко сделать случайно!)

Вот пример с набором данных mtcars, так как он используется в introductory vignette

library(dplyr) 
filter(mtcars, cyl == 8, wt < 3.5) 
mpg cyl disp hp drat wt qsec vs am gear carb 
1 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2 
2 15.2 8 304 150 3.15 3.435 17.30 0 0 3 2 
3 15.8 8 351 264 4.22 3.170 14.50 0 1 5 4 

В заключение: фильтр equivalen к subset(), не sample().

+1

Нет необходимости использовать & in пример, поскольку dplyr делает это автоматически. Из виньетки: «любое количество условий фильтрации, которые соединяются вместе с &». Таким образом, фильтр (mtcars, cyl == 8, wt <3.5) будет работать. – Vincent

+0

вы готовы, я отредактирую ответ. – marbel

0

Разобрался, как это сделать (хотя Джош О'Брайен бить меня к нему):

filter(mtcars, rownames(mtcars) %in% sample(rownames(mtcars), 10, replace = F)) 
+0

Просто любопытно ... в чем преимущество перед вашими начальными mtcars [sample (1:32, 10),]? – Vincent

+1

Я хочу попытаться использовать функции dplyr для обработки данных, когда это возможно. Я думаю, что использование тех же функций, когда это возможно, делает код максимально читаемым. – luciano

+1

@luciano вы можете это сделать, если вы так себя чувствуете. Но 'mtcars [sample (1:32, 10),]' намного читаем, чем используемое вами выражение filter (...). Он не предназначен для отбора проб, иначе он будет называться образцом, а не фильтром! – marbel

 Смежные вопросы

  • Нет связанных вопросов^_^