2015-07-06 7 views
0

Я хотел бы повторить все строки в моем наборе данных с вероятностью. Вероятность повторения значения в строках зависит от начальной строки. Как я могу определить для каждого элемента в рядах вероятность повторения?Сэмплированные данные в R, как заменить случайно выбранные элементы на 0

Вот небольшой пример кадра данных.

data <- data.frame(id = rep(c("01", "02", "03"),4), 
        X1 = c(100,60,90,0,60,90,0,60,0,100,60,0), 
        X2 = c(0,60,90,0,60,0,0,0,90,0,0,90)) 
head(data) 
    id X1 X2 
1 01 100 0 
2 02 60 60 
3 03 90 90 
4 01 0 0 
5 02 60 60 
6 03 90 0 

Первый столбец и столбец со значением = 0 следует повторить. Числовое значение в строке должно повторяться со случайностью 9/10. (Я ожидаю новый фрейм данных с повторными id столбцов и 0-значения элементами)

возможным примером вывод:

head(rep) 
    id X1 X2 
1 01 0 0 
2 02 60 60 
3 03 90 0 
4 01 0 0 
5 02 0 60 
6 03 90 0 

У меня проблемы с определением аргумента prob= в sample() для строк.

Любая идея?

ответ

1

В основном ваш вопрос сводится к тому, как заменить случайным образом выбранных элементов данных с 0. Вы можете сделать это довольно просто с runif, в данном случае, заменяя каждое значение 0 с вероятностью 0,1:

set.seed(144) 
data[-1] <- sapply(data[-1], function(x) ifelse(runif(length(x)) < 0.1, 0, x)) 
data 
# id X1 X2 
# 1 01 0 0 
# 2 02 60 60 
# 3 03 90 90 
# 4 01 0 0 
# 5 02 60 60 
# 6 03 90 0 
# 7 01 0 0 
# 8 02 60 0 
# 9 03 0 90 
# 10 01 100 0 
# 11 02 60 0 
# 12 03 0 90 

С этим случайным семенем единственное изменение было в первой строке ваших данных примера.