我有一个很大的数据帧,在不同的位置都有NA。我需要删除具有更多NA值的几行。
我使用filter
条条件应用了is.na()
来删除了它们。但是,他们没有取得丰硕的成果。
S.No MediaName KeyPress KPIndex Type Secs X Y
001 Dat NA 1 Fixation 18 117 89
002 New NA NA Saccade 33 NA NA
003 Dat NA 2 Fixation 23 117 NA
df <- df%>%filter(df, !is.na(KeyPress) & !is.na(KPIndex) & !is.na(X) & !is.na(Y))
我想根据情况使用dplyr删除。在大型数据框中,我有更多与此类似的行。我的代码有什么问题?
答案 0 :(得分:2)
如果一列以上,请使用filter_at
library(dplyr)
df %>%
filter_at(vars(KeyPress, KPIndex, X, Y), any_vars(!is.na(.)))
或者使用rowSums
中的base R
nm1 <- c("KeyPress", "KPIndex", "X", "Y")
df[rowSums(!is.na(df[nm1]))!= 0,]
df <- structure(list(S.No = 1:3, MediaName = c("Dat", "New", "Dat"),
KeyPress = c(NA, NA, NA), KPIndex = c(1L, NA, 2L), Type = c("Fixation",
"Saccade", "Fixation"), Secs = c(18L, 33L, 23L), X = c(117L,
NA, 117L), Y = c(89L, NA, NA)), class = "data.frame", row.names = c(NA,
-3L))
答案 1 :(得分:2)
您应该使用|
而不是&
:
library(dplyr)
df1 %>%
filter(!is.na(KeyPress) | !is.na(KPIndex) | !is.na(X) | !is.na(Y))
# S.No MediaName KeyPress KPIndex Type Secs X Y
# 1 1 Dat NA 1 Fixation 18 117 89
# 2 3 Dat NA 2 Fixation 23 117 NA
答案 2 :(得分:0)
我将以最简单的方式出价。 Dplyr的drop_na将删除所有包含NA的行。
Array.reshape(-1)@Mask.reshape(-1,d)
如果与您的情况有关,则可以指定要查看的列(或不使用“-”)。