データフレームでNA
値を省略する方法を知りたいのですが、興味のある一部の列でのみです。
例えば、
DF <- data.frame(x = c(1, 2, 3), y = c(0, 10, NA), z=c(NA, 33, 22))
しかし、y
がNA
であるデータのみを省略したいので、結果は
x y z
1 1 0 NA
2 2 10 33
na.omit
は、NA
を含むすべての行を削除するようです。
誰かがこの簡単な質問を助けてくれますか?
しかし、今私は質問を次のように変更します:
DF <- data.frame(x = c(1, 2, 3,NA), y = c(1,0, 10, NA), z=c(43,NA, 33, NA))
x=na
またはz=na
のみを省略したい場合、|
を関数のどこに置けばよいですか?
complete.cases
関数を使用して、次のように関数に入れることができます。
DF <- data.frame(x = c(1, 2, 3), y = c(0, 10, NA), z=c(NA, 33, 22))
completeFun <- function(data, desiredCols) {
completeVec <- complete.cases(data[, desiredCols])
return(data[completeVec, ])
}
completeFun(DF, "y")
# x y z
# 1 1 0 NA
# 2 2 10 33
completeFun(DF, c("y", "z"))
# x y z
# 2 2 10 33
編集:NA
sのない行のみを返す
任意の列に少なくとも1つのNA
があるすべての行を削除する場合は、complete.cases
関数をそのまま使用します。
DF[complete.cases(DF), ]
# x y z
# 2 2 10 33
または、completeFun
がすでにワークフローに組み込まれている場合;)
completeFun(DF, names(DF))
is.na
を使用
DF <- data.frame(x = c(1, 2, 3), y = c(0, 10, NA), z=c(NA, 33, 22))
DF[!is.na(DF$y),]
ハドリーのtidyr
はこの素晴らしい関数drop_na
を取得しました
library(tidyr)
DF %>% drop_na(y)
x y z
1 1 0 NA
2 2 10 33
「サブセット」を使用
DF <- data.frame(x = c(1, 2, 3), y = c(0, 10, NA), z=c(NA, 33, 22))
subset(DF, !is.na(y))
今では、単に使用することが可能です:
na.omit(data, cols = c("x", "z"))
これを試して:
cc=is.na(DF$y)
m=which(cc==c("TRUE"))
DF=DF[-m,]
2つの特定の列のいずれかに<NA>
が含まれる場合、行を省略します。
DF[!is.na(DF$x)&!is.na(DF$z),]
これを試してください:
DF %>% t %>% na.omit %>% t