2015-07-21 2 views
0

У меня следующая матрицапеременного образца верхнего значения в R

m <- matrix(c(2, 4, 3, 5, 1, 5, 7, 9, 3, 7), nrow=5, ncol=2,) 
colnames(x) = c("Y","Z") 
m <-data.frame(m) 

Я пытаюсь создать случайное число в каждой строке, в которой верхний предел представляет собой число, основанное на значение переменного (в данном случае 1 * Y на основе значения для каждой строки для для Z)

я в настоящее время:

samp<-function(x){ 
    sample(0:1,1,replace = TRUE)} 

    x$randoms <- apply(m,1,samp) 

, которые работают хорошо работает применяя функцию образца независимо к каждой строке, но я всегда получаю ошибку, когда я пытаюсь Alte r x в образце. Я думал, что смогу сделать что-то вроде этого:

samp<-function(x){ 
     sample(0:m$Z,1,replace = TRUE)} 

     x$randoms <- apply(m,1,samp) 

но, я думаю, это было желаемое за действительное.

В конце концов я хочу результат:

Y Z randoms 
2 5  4 
4 7  7 
3 9  3 
5 3  1 
1 7  6 

Любые идеи?

+1

Ваш пример выдает ошибки - вы получили 'y' в там - что это такое? такой же, как 'x'? Кроме того, вы говорите, что хотите выбрать от 0 до 'x $ Y', но ваш желаемый результат, по-видимому, использует вместо этого' x $ Z' (например, последняя строка, ваш столбец 'Y' равен только 1, поэтому вы должны выбрать из 0 : 1, но у вас есть 6 для ваших «randoms»). Просьба уточнить. –

+0

небрежный быстрый пример от меня - исправьте мои ошибки. – Numidian

ответ

1

Ниже будет пробовать от 0 до x$Y для каждой строки, и сохранить результат в randoms:

x$randoms <- sapply(x$Y + 1, sample, 1) - 1 

Пояснение:

sapply принимает каждое значение в x$Y отдельно (назовем это y) , и называет sample(y + 1, 1).

Обратите внимание, что (например) sample(y+1, 1) будет отображать 1 случайное целое число из диапазона 1:(y+1). Поскольку вам нужно число от 0 до y, а не от 1 до y + 1, мы вычитаем 1 в конце.

Кроме того, просто указывая - нет необходимости в replace=T здесь, потому что вы все равно выбираете одно значение, поэтому не имеет значения, будет ли он заменен или нет.

+0

Отличное предположение, основанное на плохой постановке задачи ОП и выборе переменных. – N8TRO

+0

@ Mathematical.coffee прибил его, даже с моим очень неряшливым примером! У меня было ощущение, что это было что-то простое: это то, что происходит, когда вы слишком долго смотрите на экран ... – Numidian

1

на основе @ mathematical.coffee внушения и отредактированные примере это пятно конечный результат:

m <- matrix(c(2, 4, 3, 5, 1, 5, 7, 9, 3, 7), nrow=5, ncol=2,) 
colnames(m) = c("Y","Z") 
m <-data.frame(m) 

samp<-function(x){ 
sample(Z + 1, 1)} 

m$randoms <- sapply(m$Z + 1, sample, 1) - 1 
+0

Нет необходимости повторять ваш пример вместе с чужим ответом, как ваш собственный asnwer, если вы не предлагаете что-то новое на это ответ. –

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