首页 > 解决方案 > 用随机值替换列值

问题描述

大家好,我正在尝试用一定范围内的随机数值替换数据框中的某个值。

下面提供了示例数据框,我想用 0 到 0.1 之间的值替换所有数字 3。

df <- data.frame(datay = sample(1:5, 10, replace = TRUE), 
                 dataz = sample(1:10, 10, replace = TRUE))

输入:

   datay dataz
1      5     8
2      5     3
3      2     1
4      5    10
5      4     5
6      1     6
7      1     8
8      3     2
9      3     9
10     3     4

输出:

    datay dataz
1      5     8
2      5     0.05
3      2     1
4      5    10
5      4     5
6      1     6
7      1     8
8      0.05     2
9      0.02     9
10     0.01     4

标签: rdataframe

解决方案


我们还可以runif用来生成两个值之间的随机数。

inds <- df$datay == 3
df$datay[inds] <- runif(sum(inds), 0, 0.001)

df
#      datay dataz
#1  0.000555     k
#2  5.000000     v
#3  4.000000     n
#4  2.000000     q
#5  1.000000     l
#6  2.000000     n
#7  0.000121     u
#8  0.000794     z
#9  1.000000     x
#10 2.000000     d

编辑

为了对所有列执行此操作,我们可以这样做

mat <- which(df == 3, arr.ind = TRUE)
#If you need only for selected columns say for first two columns do
#mat <- which(df[1:2] == 3, arr.ind = TRUE)
df[mat] <- runif(nrow(mat), 0, 0.001)

df
#      datay    dataz
#1  5.000000  8.00000
#2  5.000000  0.00078
#3  2.000000  1.00000
#4  5.000000 10.00000
#5  4.000000  5.00000
#6  1.000000  6.00000
#7  1.000000  8.00000
#8  0.000144  2.00000
#9  0.000965  9.00000
#10 0.000771  4.00000

推荐阅读