r - 当`dplyr`中的所有列都是NA时过滤数据框
问题描述
这肯定是一个简单的问题(如果有人知道答案),但我仍然找不到关于 SO 的指导:我有一个数据框,其中有很多行,这些行只包含NA
所有列(在lead
操作之后)。我想删除这些行:
df <- structure(list(line = c("0001", NA, "0002", NA, "0003", NA, "0004",
NA, "0005", NA),
speaker = c(NA, NA, "ID16.C-U", NA, NA, NA, "ID16.B-U", NA, NA, NA),
utterance = c("7.060", NA, " ah-ha,", NA, "0.304", NA, " °°yes°°", NA, "7.740", NA),
timestamp = c(NA, "00:00:00.000 - 00:00:07.060", NA, "00:00:07.060 - 00:00:07.660", NA,
"00:00:07.660 - 00:00:07.964", NA, "00:00:07.964 - 00:00:08.610", NA,
"00:00:08.610 - 00:00:16.350")), row.names = c(NA, 10L), class = "data.frame")
但这都不是:
df %>%
mutate(timestamp = lead(timestamp)) %>%
filter(across(everything(), ~!is.na(.)))
这也不起作用:
df %>%
mutate(timestamp = lead(timestamp)) %>%
rowwise() %>%
filter(c_across(everything(), ~!is.na(.)))
解决方案是什么?
预期:
line speaker utterance timestamp
1 0001 <NA> 7.060 00:00:00.000 - 00:00:07.060
3 0002 ID16.C-U ah-ha, 00:00:07.060 - 00:00:07.660
5 0003 <NA> 0.304 00:00:07.660 - 00:00:07.964
7 0004 ID16.B-U °°yes°° 00:00:07.964 - 00:00:08.610
9 0005 <NA> 7.740 00:00:08.610 - 00:00:16.350
解决方案
这行得通吗?
df <- df %>% mutate(timestamp = lead(timestamp))
df[rowSums(is.na(df))!=ncol(df),]
伪tidyverse版本:
df %>%
dplyr::mutate(timestamp = dplyr::lead(timestamp)) %>%
dplyr::filter(rowSums(is.na(.))!=ncol(.))
推荐阅读
- html - 在新行上浮动 div 不获取整个空间
- java - Kotlin 使适配器更具可重用性
- python-3.x - TypeError:precision_score() 得到了一个意外的关键字参数“Y_pred”
- pandas - 访问另一个数据框中的分箱数据?
- html - 如何在rails中正确使用link_to及其块来合并html标签?
- c++ - is_enum<> 在另一个模板函数中不起作用/编译
- php - 如何使用php更改客户端IP地址
- multithreading - 2个线程共享同一个地址空间是什么意思?
- assembly - 当我用 nasm -f elf64 -o 编译我的代码时,我收到错误“解析器:预期指令”
- algorithm - 用于像素混合的调色板量化