删除R中连续的空行

检验员沙

df提出可能的名称匹配。每对匹配项应以空行分隔。但是,在某些情况下,我的输出在匹配对之间包含几个空行:

> df <- data.frame(id = c(1,2,NA,3,4,NA,NA,NA,5,6,NA), name = c("john jones", "john joners", 
                   NA, "clara prat", "klara prat", NA, NA, NA, "alan turing", "allan turing", 
                   NA), stringsAsFactors = F)
> df
   id         name
1   1   john jones
2   2  john joners
3  NA         <NA>
4   3   clara prat
5   4   klara prat
6  NA         <NA>
7  NA         <NA>
8  NA         <NA>
9   5  alan turing
10  6 allan turing
11 NA         <NA>

所需的输出是:

> df
   id         name
1   1   john jones
2   2  john joners
3  NA         <NA>
4   3   clara prat
5   4   klara prat
6  NA         <NA>
7   5  alan turing
8   6 allan turing
9  NA         <NA>

我可以使用for循环来做到这一点,据我所知,这并不是最佳选择。

用户名

这是rle用于寻找遗失的另一种方法

miss <- rowSums(is.na(df))

# get runs of missing 
r <- rle(miss)
r$values <- seq_along(r$values)

# subset data, removing rows when all columns are missing 
# and rows sequentially missing
df[!(miss == ncol(df) & duplicated(inverse.rle(r))), ]
#   id         name
# 1   1   john jones
# 2   2  john joners
# 3  NA         <NA>
# 4   3   clara prat
# 5   4   klara prat
# 6  NA         <NA>
# 9   5  alan turing
# 10  6 allan turing
# 11 NA         <NA>

如Akrun所述,您可以使用data.table::rleid避免某些显式rle计算

df[!(rowSums(is.na(df)) == ncol(df) & duplicated(data.table::rleid(is.na(df[[1]])))) , ]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章