Замена нулевых элементов на небольшое случайное число в таблице данных с помощью R - PullRequest
0 голосов
/ 16 мая 2018

У меня есть следующая таблица данных. Мне нужно заменить нулевые значения в столбце CPP на небольшое случайное число, используя R. Это может быть простой задачей, но я не мог понять это.

Я пробовал это, но выдает ошибку:

cty_d <- Table1[,sum(CPP==0)]
Table1[Table1 ==0] <- runif(cty_d,min=0.0001,max=0.001)

Любая помощь приветствуется.

Table1:

    cty   year   CPP
    25    1998   0.0
    25    1999   100.2
    25    2000   25.2
    25    2001   535.0
    25    2002   0.0
    25    2003   0.0
    25    2004   75.2

Output:

    cty   year   CPP
    25    1998   0.0015
    25    1999   100.2
    25    2000   25.2
    25    2001   535.0
    25    2002   0.00014
    25    2003   0.0021
    25    2004   75.2

Ответы [ 3 ]

0 голосов
/ 16 мая 2018
library(data.table)
setDT(Table1)[CPP == 0, CPP := runif(.N, min=0.0001, max=0.001)]

Принимает Table1, подмножество к CPP == 0, затем обновляет CPP для этого подмножества (:= обновляется по ссылке). .N - это data.table синтаксис для # наблюдений. Итак, 3 в вашей таблице примеров, так как подмножество CPP == 0 имеет 3 строки.

0 голосов
/ 16 мая 2018

Использование рабочего процесса, аналогичного описанному в вашем сообщении:

Table1$CPP[Table1$CPP==0] <- runif(sum(Table1$CPP==0),min=0.0001,max=0.001)

Вам просто нужно перезаписать один столбец вместо всего фрейма данных.

0 голосов
/ 16 мая 2018

Попробуйте использовать команду RAND с обновлением?

Update MyTable set CPP=(RAND() / 100) where CPP=0
...