2016-05-20 3 views
0

У меня есть следующий DF.Моделирование данных в R

> x 
    Members  Exp 
1  A 2.575374 
2  B 5.764491 
3  C 7.576994 
4  D 5.834233 
5  E 3.977425 

«Exp» - это распределенная переменная Пуассона. Теперь я хотел бы сделать симуляцию на всей таблице и посмотреть количество раз в каждом рейтинге для «Member».

Желаемый результат был бы что-то вроде:

Ранг ABCDE 1 10% 2 18% 3 42% 4 18% 5 12% 100%

Действительно ценим помощь здесь :)

Извиняюсь, но довольно новый для R.

sim <- 100 
    a <- matrix(nrow = sim, ncol = nrow(x)) 

    for (i in nrow(x)){ 
     a[,i] <<- rpois(sim, x[i,2]) 
     } 

colnames(a) <- x[,1] 

я получаю неправильное сообщение здесь,

Error in a[, i] <<- rpois(sim, x[i, 2]) : object 'a' not found 

Это работает, когда я не имею в цикле .. Идея посчитать количество строк, где «член» занимает 1-е, 2-е, 3-е, 4-й и 5-й.

В настоящее время она работает с этим кодом

sim <- 100 
    a <- matrix(nrow = sim, ncol = nrow(x)) 

    for (i in 1:nrow(x)){ 
     a[,i] <- rpois(sim, x[i,2]) 
     } 

colnames(a) <- x[,1] 

Который дает мне этот dataframe

> head(a) 
    A B C D E 
[1,] 0 9 8 3 4 
[2,] 2 10 6 3 4 
[3,] 3 6 7 9 1 
[4,] 2 3 4 6 1 
[5,] 3 4 6 7 3 
[6,] 4 3 12 5 3 

Ряд 1 является моделирование 1, строка 2 моделирования 2 и так далее .. Теперь я хочу посмотреть, как много раз A - Макс.

Что мне нужно сделать, так это создать логическую матрицу равного размера, где я применяю Max для каждой строки и вычисляю среднее значение для каждого столбца. Но Макс будет возвращать только максимальное значение для каждой строки, я хотел бы вернуться 0 или 1 в каждой клетке ..

+4

Ваш ожидаемый результат неясен и «сделать симуляцию на всей таблице и увидеть количество раз для каждого ранга для« Member ».' не имеет смысла. – mtoto

+0

Жаль, что неясно. Я хочу симулировать переменную «Exp» и видеть, сколько раз A заканчивается 1,2,3,4 и 5. То же самое для членов B, C, D и E. – samot79

+1

. Измените свой вопрос, чтобы лучше объяснить это, вместо того, чтобы изменения в разделе комментариев. – lmo

ответ

1

Это действительно делает это, но надеялся, что не использовать для петли :)

> x 
    Members  Exp 
1  A 2.575374 
2  B 5.764491 
3  C 7.576994 
4  D 5.834233 
5  E 3.977425 

sim <- 100 
a <- matrix(nrow = sim, ncol = nrow(x)) 
b <- matrix(nrow = sim, ncol = nrow(x)) 

for (i in 1:nrow(x)){ 
    a[,i] <- rpois(sim, x[i,2]) 
    } 

colnames(a) <- x[,1] 

for (j in 1:sim){ 
    for (k in 1:nrow(x)){ 
     b[j,k] <- as.numeric(a[j,k]) == max(a[j,]) 
    } 
} 

head(b) 

> head(b) 
     [,1] [,2] [,3] [,4] [,5] 
[1,] FALSE FALSE TRUE FALSE FALSE 
[2,] FALSE FALSE FALSE TRUE FALSE 
[3,] FALSE FALSE TRUE FALSE FALSE 
[4,] FALSE FALSE TRUE FALSE FALSE 
[5,] FALSE FALSE FALSE TRUE FALSE 
[6,] FALSE FALSE TRUE FALSE FALSE 
1

Попробуйте это:

... 
sim <- 100 
a <- matrix(nrow = sim, ncol = nrow(x)) 

for (i in nrow(x)){ 
    a[,i] <- rpois(sim, x[i,2]) 
} 
Смежные вопросы