如果在间隔中,数据框中的值为零

values in dataframe to zero if in interval

我还是 R 的新手,我试图将数据框中的值设为零,如果它们在 IR e {-0,5: 0,5} 区间内 数据框如下所示:

  var1 var2 var3
1 -0.2  1.0  0.7
2  0.2 -0.5 -0.2
3  1.0  0.2  3.0
4  0.5  2.0  4.0
5 -0.7  4.0  0.3

我只找到一种简单的解决方案(例如 < 0.5):

dat[< 0.5] <- 0

但是 dat[ >-0.5 & <0.5] <- 0 不起作用。

我找到了解决方案,但是这个不是很优雅:

var1 <- c(-0.2,0.2,1,0.5,-0.7)
var2 <- c(1,-0.5,0.2,2,4)
var3 <- c(0.7,-0.2,3,4,0.3)
dat <- data.frame(var1, var2, var3)
Rows <- length(dat[,1])
Cols <- length(dat[1,])
for (i in 1:Rows) {
  for (j in 1:Cols)
  if (dat[i,j] < 0.5 & dat[i,j] > -0.5){dat[i,j] = 0}
} 

数据框的结果:

  var1 var2 var3
1  0.0  1.0  0.7
2  0.0 -0.5  0.0
3  1.0  0.0  3.0
4  0.5  2.0  4.0
5 -0.7  4.0  0.0

你能帮我找到一个更优雅的解决这个问题的方法吗? 非常感谢您的帮助。

Instead of creating the data frame with a for loop, you can use ``data.frame``:
var1 <- c(-0.2,0.2,1,0.5,-0.7)
var2 <- c(1,-0.5,0.2,2,4)
var3 <- c(0.7,-0.2,3,4,0.3)

dat<-data.frame(var1=var1,var2=var2,var3=var3)

To replace values based on your conjunction do:
dat[dat>-0.5 & dat<0.5]=0

您还可以查看 tidyversedplyr 包,它们使数据处理更容易。

为什么不呢:

> dat[ abs(dat) < 0.5] <- 0
> dat
  var1 var2 var3
1  0.0  1.0  0.7
2  0.0 -0.5  0.0
3  1.0  0.0  3.0
4  0.5  2.0  4.0
5 -0.7  4.0  0.0