R:随机更改数据框中的值
R: Randomly Changing Values in a Dataframe
我正在使用 R 编程语言。假设我有以下数据框:
a = rnorm(100,10,1)
b = rnorm(100,10,5)
c = rnorm(100,10,10)
my_data = data.frame(a,b,c)
head(my_data)
a b c
1 9.623328 10.560865 18.520644
2 7.805709 14.550575 1.144607
3 9.290704 16.597876 26.662429
4 8.828285 10.229534 -8.228798
5 9.454419 5.059026 18.454799
6 9.835949 16.778726 2.372435
我的问题:对于这个数据框中的每个变量,我想用 0 随机替换这些数字的 50%。
这是我想到的一种低效的方法:
my_data$a_new <- sample( LETTERS[1:2], 100, replace=TRUE, prob=c(0.5, 0.5) )
my_data$b_new <- sample( LETTERS[1:2], 100, replace=TRUE, prob=c(0.5, 0.5) )
my_data$c_new <- sample( LETTERS[1:2], 100, replace=TRUE, prob=c(0.5, 0.5) )
my_data$a_new2 = ifelse(my_data$a_new == "A", my_data$a, 0)
my_data$b_new2 = ifelse(my_data$b_new == "B", my_data$b, 0)
my_data$c_new2 = ifelse(my_data$b_new == "C", my_data$c, 0)
有没有更有效的方法?
您可以使用 lapply
-
my_data[] <- lapply(my_data, function(x) {
x[sample(seq_along(x), length(x)/2)] <- 0
x
})
如果对于不同的列,您有不同的百分比要替换为 0,您可以使用 Map
。
perc <- c(0.2, 0.4, 0.5)
my_data[] <- Map(function(x, y) {
x[sample(seq_along(x), length(x) * y)] <- 0
x
}, my_data, perc)
我正在使用 R 编程语言。假设我有以下数据框:
a = rnorm(100,10,1)
b = rnorm(100,10,5)
c = rnorm(100,10,10)
my_data = data.frame(a,b,c)
head(my_data)
a b c
1 9.623328 10.560865 18.520644
2 7.805709 14.550575 1.144607
3 9.290704 16.597876 26.662429
4 8.828285 10.229534 -8.228798
5 9.454419 5.059026 18.454799
6 9.835949 16.778726 2.372435
我的问题:对于这个数据框中的每个变量,我想用 0 随机替换这些数字的 50%。
这是我想到的一种低效的方法:
my_data$a_new <- sample( LETTERS[1:2], 100, replace=TRUE, prob=c(0.5, 0.5) )
my_data$b_new <- sample( LETTERS[1:2], 100, replace=TRUE, prob=c(0.5, 0.5) )
my_data$c_new <- sample( LETTERS[1:2], 100, replace=TRUE, prob=c(0.5, 0.5) )
my_data$a_new2 = ifelse(my_data$a_new == "A", my_data$a, 0)
my_data$b_new2 = ifelse(my_data$b_new == "B", my_data$b, 0)
my_data$c_new2 = ifelse(my_data$b_new == "C", my_data$c, 0)
有没有更有效的方法?
您可以使用 lapply
-
my_data[] <- lapply(my_data, function(x) {
x[sample(seq_along(x), length(x)/2)] <- 0
x
})
如果对于不同的列,您有不同的百分比要替换为 0,您可以使用 Map
。
perc <- c(0.2, 0.4, 0.5)
my_data[] <- Map(function(x, y) {
x[sample(seq_along(x), length(x) * y)] <- 0
x
}, my_data, perc)