R:随机更改数据帧中的值 [英] R: Randomly Changing Values in a Dataframe

查看:16
本文介绍了R:随机更改数据帧中的值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用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

我的问题:对于此数据框中的每个变量,我希望将这些数字中的50%随机替换为0。

以下是我想到的一个效率低下的方法:

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:随机更改数据帧中的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆