2016-05-11 2 views
0

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

top<- head(xdata, 100) 

bottom <- head(xdata, 100) 

, но я хочу в одной команде

как это ...

both <- head(xdata, 100) + head(xdata, 100) 

Благодаря

+0

Если это кадр данных, тогда 'rbind (head (xdata, 100), tail (xdata, 100))'. Если это вектор, используйте 'c()' вместо 'rbind()'. – Gregor

+0

В случае, если вы просто хотите просмотреть верхние + нижние n строк в консоли, вы можете использовать пакет 'data.table', который делает это по умолчанию. Например. 'print (xdata, topn = 100)' – lukeA

+0

Спасибо Gregor и LukeA ....... c (head (xdata, 100), tail (xdata, 100)) работает ... – mona

ответ

4

Вы можете сделать это таким образом, если п длина вашего вектор данных.

# Fake data 
n <- 10^6 
xdata <- runif(n) 

# Get first 100 and last 100 in vector 
v <- xdata[c(1:100, (n-99):n)] 

Вы также можете использовать tail как кто-то упоминается в комментариях, но это более эффективно индексировать, как я сделал выше. Чтобы продемонстрировать это:

# Load microbenchmark package to compare computation speed 
library(microbenchmark) 
library(microbenchmark) 
m <- microbenchmark("direct index" = xdata[c(1:100, (n-99):n)], 
      "head/tail" = c(head(xdata, 100), tail(xdata, 100))) 
print(m) 
#Unit: microseconds 
#  expr  min  lq  mean median uq  max  neval 
#direct index 2.814 3.028 3.54298 3.422 3.6950 16.255 100 
#head/tail  29.239 30.691 34.61539 31.628 33.0045 110.648 100 

Индексация на моей машине на 6,5 раза выше.

+0

сравнить на больших образцах, хотя , например 10^6 – Bulat

+0

Я все еще получаю лучшую производительность от индексирования. Если вы можете предоставить пример, где лучше использовать 'head' и' tail', мне было бы интересно увидеть это ... –

+1

Это не моя точка. Нет необходимости беспокоиться о производительности на 1000 записей. Довольно часто решения работают лучше на небольших образцах, но плохо масштабируются. – Bulat

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