【发布时间】:2021-04-17 16:36:35
【问题描述】:
我试图排除在该行的所有列中具有缺失值 (NA) 的行,并且所有后续行都只有缺失值(或者是最后一个空行本身),即我想删除尾随“所有-NA" 行。
我想出了下面的解决方案,它有效但速度太慢(我在数千个表上使用此功能),可能是因为 while 循环。
## Aux function to remove NA rows below table
remove_empty_row_last <- function(dt){
dt[ , row_empty := rowSums(is.na(dt)) == ncol(dt)]
while (dt[.N, row_empty] == TRUE) {
dt <- dt[1:(.N-1)]
}
dt %>% return()
}
d <- data.table(a = c(1,NA,3,NA,5,NA,NA), b = c(1,NA,3,4,5,NA,NA))
remove_empty_row_last(d)
#EDIT2: adding more test cases
d2 <- data.table(A = c(1,NA,3,NA,5,1 ,NA), B = c(1,NA,3,4,5,NA,NA))
remove_empty_row_last(d2)
d3 <- data.table(A = c(1,NA,3,NA,5,NA,NA), B = c(1,NA,3,4,5,1,NA))
remove_empty_row_last(d3)
#Edit3:adding no NA rows test case
d4 <- data.table(A = c(1,2,3,NA,5,NA,NA), B = c(1,2,3,4,5,1,7))
d4 %>% remove_empty_row_last()
【问题讨论】:
-
你应该多尝试提供简洁的例子,
dt %>% return()真的很糟糕。 -
不知道速度,但在这方面值得一提的是
zoo::na.trim:na.trim(d, is.na = "all", sides = "right")
标签: r data.table subset na missing-data