我对使用循环有点陌生,所以请保持友善。
所以我有以下几行代码:
isTRUE(is.na(METEO_Data[,2]))
isTRUE(is.na(METEO_Data[,3]))
isTRUE(is.na(METEO_Data[,4]))
isTRUE(is.na(METEO_Data[,5]))
isTRUE(is.na(METEO_Data[,6]))
isTRUE(is.na(METEO_Data[,7]))
isTRUE(is.na(METEO_Data[,8]))
isTRUE(is.na(METEO_Data[,9]))
我只是检查我的数据框中是否有任何NA。
我的输出:
> isTRUE(is.na(METEO_Data[,2]))
[1] FALSE
> isTRUE(is.na(METEO_Data[,3]))
[1] FALSE
> isTRUE(is.na(METEO_Data[,4]))
[1] FALSE
> isTRUE(is.na(METEO_Data[,5]))
[1] FALSE
> isTRUE(is.na(METEO_Data[,6]))
[1] FALSE
> isTRUE(is.na(METEO_Data[,7]))
[1] FALSE
> isTRUE(is.na(METEO_Data[,8]))
[1] FALSE
> isTRUE(is.na(METEO_Data[,9]))
[1] FALSE
这为什么不起作用:
for (i in 2:9) {
isTRUE(is.na(METEO_Data[,i]))
}
print(i)
输出:
> for (i in 2:9) {
+ isTRUE(is.na(METEO_Data[,i]))
+ }
> print(i)
[1] 9
答案 0 :(得分:3)
您需要在循环中打印
print(isTRUE(is.na(METEO_Data[,i])))
答案 1 :(得分:2)
不建议OP尝试检查其数据中是否有NA
的方式。
示例数据
(dat <- data.frame(col1 = c(1, NA, NA, 2),
col2 = 3))
# col1 col2
#1 1 3
#2 NA 3
#3 NA 3
#4 2 3
使用isTRUE
for (i in 1:2) {
print(isTRUE(is.na(dat[,i])))
}
# [1] FALSE
# [1] FALSE
您可以使用anyNA
代替isTRUE
,也可以使用sapply
代替for循环,但这取决于您
sapply(dat, anyNA)
# col1 col2
# TRUE FALSE
感谢@Gregor!
如果每列需要NA
个数量,则可以尝试
sapply(dat, function(x) sum(is.na(x)))
# col1 col2
# 2 0
或更有效
colSums(is.na(dat))
#col1 col2
# 2 0
答案 2 :(得分:1)
您在打印i
时要打印迭代次数。
如果要检查所有数据框的NA
,只需使用is.na(df)
。