Как разбить набор значений (вектор) в R - PullRequest
5 голосов
/ 12 октября 2010

Я программирую на R. У меня есть вектор, содержащий, скажем, 1000 значений.Теперь предположим, что я хочу разбить эти 1000 значений случайным образом на два новых набора, один из которых содержит 400 значений, а другой - 600. Как я могу это сделать?Я думал о том, чтобы сделать что-то вроде этого ...

firstset <- sample(mydata, size=400)

... но это не разделяет данные (другими словами, я до сих пор не знаю, какие 600 значений поместить вдругой набор).Я также думал о цикле от 1 до 400, случайном удалении 1 значения за раз и размещении его в firstset.Это правильно разделит данные, но как это реализовать, мне не ясно.Кроме того, мне было сказано избегать for циклов в R, когда это возможно.

Есть идеи?

Ответы [ 3 ]

9 голосов
/ 12 октября 2010

Вместо выборки значений вы можете выбрать их позиции.

positions <- sample(length(mydata), size=400)  # ucfagls' suggestion
firstset <- mydata[positions]
secondset <- mydata[-positions]

РЕДАКТИРОВАТЬ: предложение ucfagls будет более эффективным (особенно для больших векторов), поскольку оно позволяет избежать выделения вектора позиций в R.

8 голосов
/ 12 октября 2010

Просто рандомизируйте mydata и берите первые 400, а затем последние 600.

mydata <- sample(mydata)
firstset <- mydata[1:400]
secondset <- mydata[401:1000]
4 голосов
/ 12 октября 2010

Если mydata действительно вектор, один из вариантов будет:

split(mydata, sample(c(rep("group1", 600), rep("group2", 400))))
...