有没有办法确定引入 NA 的位置?
Is there a way to identify where NAs are introduced?
最近浏览了我相当大的数据集,发现一些 foo 决定使用逗号。试图将其全部转换为数字。使用了一个不错的小 gsub 来摆脱那些讨厌的逗号,但我仍然发现 NA 是由强制引入的。有没有一种方法可以按列和行来识别引入这些 NA 的位置,以便我了解为什么会发生这种情况?
谢谢!
使用is.na()
函数。考虑以下数据框,其中包含 NA
个值,例如:
> df <- data.frame(v1=c(1,2,NA,4), v2=c(NA,6,7,8), v3=c(9,NA,NA,12))
> df
v1 v2 v3
1 1 NA 9
2 2 6 NA
3 NA 7 NA
4 4 8 12
您可以将 is.na
与 sapply
一起使用以获得以下结果:
> sapply(df, function(x) { c(1:length(x))[is.na(x)] })
$v1
[1] 3
$v2
[1] 1
$v3
[1] 2 3
每一列将与出现 NA
个值的行一起返回。
我还会使用 which
和 arr.ind=TRUE
来获取 row/column 索引('df' 来自@Tim Biegeleisen 的 post)
which(is.na(df), arr.ind=TRUE)
# row col
#[1,] 3 1
#[2,] 1 2
#[3,] 2 3
#[4,] 3 3
最近浏览了我相当大的数据集,发现一些 foo 决定使用逗号。试图将其全部转换为数字。使用了一个不错的小 gsub 来摆脱那些讨厌的逗号,但我仍然发现 NA 是由强制引入的。有没有一种方法可以按列和行来识别引入这些 NA 的位置,以便我了解为什么会发生这种情况?
谢谢!
使用is.na()
函数。考虑以下数据框,其中包含 NA
个值,例如:
> df <- data.frame(v1=c(1,2,NA,4), v2=c(NA,6,7,8), v3=c(9,NA,NA,12))
> df
v1 v2 v3
1 1 NA 9
2 2 6 NA
3 NA 7 NA
4 4 8 12
您可以将 is.na
与 sapply
一起使用以获得以下结果:
> sapply(df, function(x) { c(1:length(x))[is.na(x)] })
$v1
[1] 3
$v2
[1] 1
$v3
[1] 2 3
每一列将与出现 NA
个值的行一起返回。
我还会使用 which
和 arr.ind=TRUE
来获取 row/column 索引('df' 来自@Tim Biegeleisen 的 post)
which(is.na(df), arr.ind=TRUE)
# row col
#[1,] 3 1
#[2,] 1 2
#[3,] 2 3
#[4,] 3 3