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

问题描述 投票:1回答:2

我仍然是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

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

r dataframe intervals
2个回答
2
投票

为什么不:

> 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

1
投票
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包,以便于数据处理。

© www.soinside.com 2019 - 2024. All rights reserved.