删除R中的选择性NA值的行

时间:2014-10-04 22:04:48

标签: r

我有一个像这样的数据框,

1 2 abc NA NA NA NA 
2 3 abd be f  NA NA
4 5 NA  NA NA NA NA)
....................

现在,我想从第3列开始删除那些包含所有NA的行。 我正在做这样的事情,

df <- df[ !(is.na(df$X3)) |!(is.na(df$X4)) ..........]

但是,对于大量列

,上述命令过于繁琐

此外,在删除这些行后,我想按顺序重命名我的数据帧的列名,即V1 V2 V3...。直到现在,我在做,

colnames(df) <- c("V1","V2","V3"...)

这对于大量的列来说是乏味的。什么是更好的方法?谢谢!

2 个答案:

答案 0 :(得分:2)

尝试

df <- df[rowSums(!is.na(df[, -c(1:2)])) != 0, ] # Remove rows which have NA's from column 3 on-wards
names(df) <- paste0("V", seq_along(df)) # Renaming the column names
df
##   V1 V2  V3   V4   V5 V6 V7
## 1  1  2 abc <NA> <NA> NA NA
## 2  2  3 abd   be    f NA NA

答案 1 :(得分:0)

另一个解决方案是df <- df[complete.cases(df[ ,-(1:2)]), ]

df <- data.frame(c(1:4,NA), 3:7,c("abc","abd",NA,1:2),c(NA,"be",NA,"c", "d"),c(NA,"f",NA, "xy", "1.89"))

names(df) <- paste0("V", 1:ncol(df))
df
  V1 V2   V3   V4   V5
1  1  3  abc <NA> <NA>
2  2  4  abd   be    f
3  3  5 <NA> <NA> <NA>
4  4  6    1    c   xy
5  NA 7    2    d 1.89

df <- df[complete.cases(df[ ,-(1:2)]) , ]
df
  V1 V2  V3 V4   V5
2  2  4 abd be    f
4  4  6   1  c   xy
5  NA 7   2  d 1.89