使用R替换数据表中具有小随机数的零元素

时间:2018-05-16 18:04:56

标签: r replace data.table zero

我有以下数据表。我需要使用R将小的随机数替换为CPP列中的零值。这可能是一个简单的任务,但我无法弄清楚这一点。

我尝试了这个,但给了我一个错误:

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 :(得分:1)

library(data.table)
setDT(Table1)[CPP == 0, CPP := runif(.N, min=0.0001, max=0.001)]

将Table1,子集转换为CPP == 0,然后更新该子集的CPP(:=通过引用更新)。对于观察次数,.Ndata.table语法。因此,您的示例表中有3个,因为CPP == 0的子集有3行。

答案 1 :(得分:1)

使用类似于帖子中的工作流程:

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

您只需要覆盖单列而不是整个数据框。

答案 2 :(得分:0)

尝试使用带有更新的RAND命令?

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