155

データフレームの値を省略する方法を知りたいのです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またはのみを省略したい場合、 in関数z=naはどこに置くことができますか?|

4

9 に答える 9

229

使用する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),]
于 2012-06-29T00:06:10.070 に答える
96

ハドリーtidyrはちょうどこの驚くべき機能を持っていますdrop_na

library(tidyr)
DF %>% drop_na(y)
  x  y  z
1 1  0 NA
2 2 10 33
于 2016-08-16T18:37:12.930 に答える
93

この関数を使用して、次の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

編集: sのない行のみを返すNA

NA任意の列に少なくとも1つの行があるすべての行を削除する場合は、complete.cases関数をまっすぐに使用します。

DF[complete.cases(DF), ]
#   x  y  z
# 2 2 10 33

またはcompleteFun、ワークフローにすでに組み込まれている場合;)

completeFun(DF, names(DF))
于 2012-06-29T08:08:52.327 に答える
36

'サブセット'を使用

DF <- data.frame(x = c(1, 2, 3), y = c(0, 10, NA), z=c(NA, 33, 22))
subset(DF, !is.na(y))
于 2013-06-12T19:00:24.693 に答える
16

に使用することが可能na.omitですdata.table

na.omit(data, cols = c("x", "z"))
于 2019-02-28T11:48:15.117 に答える
6

2つの特定の列のいずれかにが含まれている場合は、行を省略します<NA>

DF[!is.na(DF$x)&!is.na(DF$z),]
于 2019-08-21T18:44:58.613 に答える
3

これを試して:

cc=is.na(DF$y)
m=which(cc==c("TRUE"))
DF=DF[-m,]
于 2012-06-29T01:33:56.987 に答える
1

これを試してみてください:

DF %>% t %>% na.omit %>% t

データフレームを転置し、転置前に「列」であったnull行を省略してから、転置して戻します。

于 2019-08-22T19:59:40.077 に答える
1

更新するには、次のtidyverseアプローチを使用しdplyrます。

library(dplyr)

your_data_frame %>% 
  filter(!is.na(region_column))
于 2021-09-20T02:56:21.623 に答える