我希望任何超出我想要范围的ET值为0(或NA),我认为应该这么简单:
df[df$ET < 0 & df$ET > 10,]<- 0
但是
Error in [<-.data.frame(*tmp*`, daysum$ET < 0, , value = 0) :
missing values are not allowed in subscripted assignments of data frames
即使在没有&
的情况下简化它,我也会得到同样的错误。
str(df):
'data.frame': 365 obs. of 3 variables:
$ day : Factor w/ 367 levels "1","2","3","4",..: 1 2 3 4 5 6 7 8 9 10 ...
$ Rain_Tot: num 0 0 0.254 0 0 0 0 0 0 0 ...
$ ET : num 0.776 0.529 0.432 0.458 0.435 ...
答案 0 :(得分:0)
以下内容应该有效:
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
答案 1 :(得分:0)
我认为它可能是您拥有的NAs,因为以下内容适用于我的一些测试数据:
df[df$ET < 0 & df$ET > 10]<- 0
(没有逗号)