我仍然是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
你能帮我找到一个更优雅的解决方案吗?非常感谢您的帮助。
为什么不:
> 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
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
您还可以查看tidyverse
或dplyr
包,以便于数据处理。