我有一个像这样的数据框,
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"...)
这对于大量的列来说是乏味的。什么是更好的方法?谢谢!
答案 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