R 如果超出特定范围,则将值更改为0

R 如果超出特定范围,则将值更改为0,r,R,我希望任何超出我期望范围的ET值为0(或NA),我认为应该是这么简单: df[df$ET < 0 & df$ET > 10,]<- 0 以下方面应起作用: df$ET[df$ET < 0 | df$ET > 10] <- 0 我认为这可能是您拥有的NAs,因为以下内容对我拥有的一些测试数据起到了作用: df[df$ET < 0 & df$ET > 10]<- 0 df[df$ET10]在我尝试这两种方法时显示相同的错误消

我希望任何超出我期望范围的ET值为0(或NA),我认为应该是这么简单:

df[df$ET < 0 & df$ET > 10,]<- 0

以下方面应起作用:

df$ET[df$ET < 0 | df$ET > 10] <- 0

我认为这可能是您拥有的NAs,因为以下内容对我拥有的一些测试数据起到了作用:

df[df$ET < 0 & df$ET > 10]<- 0

df[df$ET<0&df$ET>10]在我尝试这两种方法时显示相同的错误消息。也许我的数据帧有问题?有很多NAs,我想这就是“不允许缺少值”的意思。有什么办法可以解决这个问题吗?现在我想起来了,请告诉我,
str(df)
df$ET<0
,同时
df$ET>10
???如果可能的话,我们应该立即解雇所有的数学教授。@Nazer,我认为你的
data.frame
没有任何问题。请确保您只是选择了相关的列,并且您的
[
]
之间没有任何逗号。当我尝试您建议的“以下内容”时,我得到的是TRUE和FALSE,对于最后一行,同样的错误。@Nazer,请将您所做的完全粘贴到最后一行。我确实忘记了其中的一部分!第一次df后的
$ET
。它已经解决了,我们有一个非常好的过滤示例!谢谢你,阿南达。
df$ET[df$ET < 0 | df$ET > 10] <- 0
## Sample data
set.seed(1)
df <- data.frame(ET = c(-5, 1, -6, 2, NA,
                        10, 11, NA, 3, 4),
                 V1 = 0)
df
#    ET V1
# 1  -5  0
# 2   1  0
# 3  -6  0
# 4   2  0
# 5  NA  0
# 6  10  0
# 7  11  0
# 8  NA  0
# 9   3  0
# 10  4  0
df$ET < 0
df$ET > 10
df$ET < 0 & df$ET > 10
df$ET < 0 | df$ET > 10
df$ET[df$ET < 0 | df$ET > 10] <- 0
df
#    ET V1
# 1   0  0
# 2   1  0
# 3   0  0
# 4   2  0
# 5  NA  0
# 6  10  0
# 7   0  0
# 8  NA  0
# 9   3  0
# 10  4  0
df[df$ET < 0 & df$ET > 10]<- 0