我有以下数据表。我需要使用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
答案 0 :(得分:1)
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行。
答案 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