Как сгенерировать и упорядочить поднастроенный фрейм данных длиной не более X элементов - PullRequest
0 голосов
/ 12 апреля 2019

У меня большой фрейм данных (df). Я хотел бы произвести df2 отсюда. df2 должен соответствовать следующим критериям:

1) Подставка устанавливается по значению в одном из столбцов.

2) df2 должен иметь длину не более 20 элементов.

3) df2 должен быть упорядочен по возрастанию значения

Мои попытки:

A <- floor(runif(100, min = 1, max = 100))
B <- floor(runif(100, min = 1, max = 100))
as.data.frame(cbind(A, B)) -> df

head(df[which(df$A < 50),], n = 20) -> df2

Это работает нормально, но я бы хотел, чтобы вывод был длиной не более 20 элементов.

head(df[which(df$A < 50),], n < 20) -> df2  
<=/=</< 

Весь результат в том, что 'n' не найдено.

order(head(df[which(df$A < 20),], decreasing = False)) -> df2

Вид работает, но создает список, а не фрейм данных. Кроме того, когда я пытаюсь, мой вывод не увеличивается.

Любая помощь будет оценена.

1 Ответ

2 голосов
/ 12 апреля 2019

Пытался сделать это в одной строке в базе R, но это становилось действительно уродливым, так что вот двухшаговое решение

temp <- df[head(which(df$A < 50), 20), ]
temp[order(temp$A), ]

#    A  B
#4   4 24
#35  7 49
#13  9 16
#39 10 44
#1  12 41
#26 14  8
#14 15 11
#11 16 92
#31 17 17
#20 19 95
#2  20 78
#6  30 94
#16 33 66
#12 34 70
#25 35 21
#9  41 69
#15 41 28
#18 43 37
#5  48 58
#22 49 24

Однако, с dplyr вы можете сделать этов одной цепочке операций

library(dplyr)
df %>%
  filter(A < 50) %>%
  slice(1:20) %>%
  arrange(A)

Вы можете изменить значения 50 и 20 в зависимости от ваших предпочтений.

данные

set.seed(2345)
A <- floor(runif(100, min = 1, max = 100))
B <- floor(runif(100, min = 1, max = 100))
as.data.frame(cbind(A, B)) -> df
...