删除 R data.table 中特定列中带有 NA 的行

Removing rows in a R data.table with NAs in specific columns

我有一个 data.table 有很多功能。我想删除仅针对某些功能的值为 NA 的行。

目前我正在使用以下方法来处理这个问题:

data.joined.sample <- data.joined.sample  %>% 
  filter(!is.na(lat))   %>% 
  filter(!is.na(long))   %>% 
  filter(!is.na(temp))   %>% 
  filter(!is.na(year))   %>% 
  filter(!is.na(month))   %>% 
  filter(!is.na(day))   %>% 
  filter(!is.na(hour))   %>% 
.......

有没有更简洁的方法来实现?

str(data.joined.sample)
Classes ‘data.table’ and 'data.frame':  336776 obs. of  50 variables:

我们可以 select 这些列,使用 complete.cases 基于它获得 NA 的逻辑 vector 并使用它来删除 NA 元素

data.joined.sample[complete.cases(data.joined.sample[colsofinterest]),]

其中

colsofinterest <- c("lat", "long", "temp", "year", "month", "day", "hour")

更新

根据 OP 的评论,如果它是 data.table,则子集 colsofinterest 并使用 complete.cases

data.joined.sample[complete.cases(data.joined.sample[, colsofinterest, with = FALSE])]

data.table-对象,如果这实际上是您正在使用的对象,则“[”函数的语法略有不同。查看此控制台会话:

> DT = data.table(x=rep(c("b","a","c"),each=3), y=c(1,3,6), v=1:9)
> DT[x=="a"&y==1]
   x y v
1: a 1 4
> is.na(DT[x=="a"&y==1]$v) <- TRUE # make one item NA
> DT[x=="a"&y==1]
   x y  v
1: a 1 NA
> DT
   x y  v
1: b 1  1
2: b 3  2
3: b 6  3
4: a 1 NA
5: a 3  5
6: a 6  6
7: c 1  7
8: c 3  8
9: c 6  9
> DT[complete.cases(DT)]  # note no comma
   x y v
1: b 1 1
2: b 3 2
3: b 6 3
4: a 3 5
5: a 6 6
6: c 1 7
7: c 3 8
8: c 6 9
>  DT   # But that didn't remove the NA, it only gave a value
   x y  v
1: b 1  1
2: b 3  2
3: b 6  3
4: a 1 NA
5: a 3  5
6: a 6  6
7: c 1  7
8: c 3  8
9: c 6  9
> DT <- DT[complete.cases(DT)]  # do this assignment to make permanent
> DT
   x y v
1: b 1 1
2: b 3 2
3: b 6 3
4: a 3 5
5: a 6 6
6: c 1 7
7: c 3 8
8: c 6 9

可能不是真的"data.table way"。