有条件地删除将所有值更改为NA的行

时间:2017-10-05 18:48:49

标签: r

我有一个包含多列的数据框。第一列没有名称,因此R给它提供了Col1标题。我必须从数据框中删除具有Value&#的某些行34; TBD"在Col1。

数据框:

Col1   Name   Addreess
<NA>   ABC    ddfddf
<NA>   XYZ    HJJJ
<NA>   KKL    PPOI
tbd    HGGF   UYTT
<NA>   fFFF   OOOO

我用下面的代码来做,

df1<- df[!(df$Col1=="tbd"), ] 

以excel格式编写输出。但是,输出不会删除tbd行并将数据帧中的所有值更改为NA

1 个答案:

答案 0 :(得分:1)

我找到了一个使用循环的解决方案。它不是解决这个问题最优雅的方法,但有帮助。

首先是您的数据框

Col1 <- c(NA,NA,NA,'tbd',NA)
Name <- c('ABC','XYZ','KKL','HGGF','fFFF')
Addreess <- c('ddfddf','HJJJ','PPOI','UYTT','OOOO')
df <- data.frame(Col1,Name,Addreess)
> df
  Col1 Name Addreess
1 <NA>  ABC   ddfddf
2 <NA>  XYZ     HJJJ
3 <NA>  KKL     PPOI
4  tbd HGGF     UYTT
5 <NA> fFFF     OOOO

应用循环来查找带有&#39; tbd&#39;在数据框的Col1列中构建一个新的,没有&#39; tbd&#39;,只选择Col1中的行&#39; NA&#39;

df1 <- c()
for(i in 1:nrow(df)){
  if(is.na(df$Col1[i])){
    df1 <- rbind(df1,df[i,])
  }
}

导致:

> df1
  Col1 Name Addreess
1 <NA>  ABC   ddfddf
2 <NA>  XYZ     HJJJ
3 <NA>  KKL     PPOI
5 <NA> fFFF     OOOO

修改<!/强>

有一种更简单,更优雅的方式来执行此操作:

v <- which(df$Col1 %in% 'tbd')
df <- df[-v,]

我希望能帮助你。

问候。