从简单的 for 循环中获取逻辑
Getting logicals from a simple for loop
我对使用循环有点陌生,所以请多关照。
所以我有这些代码行:
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
需要在循环内打印
print(isTRUE(is.na(METEO_Data[,i])))
当您打印 i
时,您正在打印迭代次数。
如果要检查所有数据框的 NA
,只需使用 is.na(df)
.
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
OP 的方法使用 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
我对使用循环有点陌生,所以请多关照。
所以我有这些代码行:
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
需要在循环内打印
print(isTRUE(is.na(METEO_Data[,i])))
当您打印 i
时,您正在打印迭代次数。
如果要检查所有数据框的 NA
,只需使用 is.na(df)
.
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
OP 的方法使用 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