我有一个包含5个时间列(第一年,第二年y等)的数据帧,对于某些行,我在非缺失值之间具有NA。下面的示例:
df = structure(list(FirstYStage = c(NA, 3.2, 3.1, NA, NA, 2, 1, 3.2,
3.1, 1, 2, 5, 2, NA, NA, NA, NA, 2, 3.1, 1), SecondYStage = c(NA,
3.1, 3.1, NA, NA, 2, 1, 4, 3.1, 1, NA, 5, 3.1, 3.2, 2, 3.1, NA,
2, 3.1, 1), ThirdYStage = c(NA, NA, 3.1, NA, NA, 3.2, 1, 4, NA,
1, NA, NA, 3.2, NA, 2, 3.2, NA, NA, 2, 1), FourthYStage = c(NA,
NA, 3.1, NA, NA, NA, 1, 4, NA, 1, NA, NA, NA, 4, 2, NA, NA, NA,
2, 1), FifthYStage = c(NA, NA, 2, NA, NA, NA, 1, 5, NA, NA, NA,
NA, 3.2, NA, 2, 3.2, NA, NA, 2, 1)), class = c("tbl_df", "tbl",
"data.frame"), row.names = c(NA, -20L))
我想使用dplyr计算在非缺失值之间缺少值的行数。第13、14和16行就是示例。
我该如何实现?我觉得这与paste
整行并向NA的左侧和右侧看...有关,但不清楚如何进行此操作。
答案 0 :(得分:5)
sum(grepl("[[:digit:]]+[NA]+[[:digit:]]", apply(df, 1, paste, collapse = "")))
[1] 3
简而言之:
连接行
检查哪些行返回TRUE
以匹配字符串:“ number-NA-number”(在这种情况下,行13
,14
和{{ 1}})
对求和为16
基于@ Sotos的评论,这样做甚至更好,因为它阻止我们将TRUE
与apply
一起使用:
margin = 1