r - 根据定义为数字名称的列子集过滤 NA
问题描述
我正在尝试在数值列的子集中过滤所有包含系统 NA 的记录。
这是一个玩具示例。
library(tidyverse)
df <- tibble(
year = c(2001, 2002, 2003, 2001, 2002, 2003, 2001),
rank = c(12, 25, 65, NA, NA, NA, NA),
category = c("a", "a", "b", "c", "c", "c", NA),
other = c("x", "y", "x", "y", "x", "y", "x")
)
df %>%
pivot_wider(names_from = year, values_from = rank) %>%
filter(.cols = c(2001:2003),
.fns = ~ !is.na(.x))
此代码不起作用,它无法识别列2001:2003
-通过过滤列 2001、2002、2003 的所有 NA 来基本上删除第三条记录的正确方法是什么。列范围需要像我一样指定为范围2001:2003。
应该过滤掉记录“c”,但不是所有列都是 NA 的记录(玩具示例中的最后一个)
这是我得到的错误:
错误:
filter()
输入有问题..1
。x 输入..1
已命名。ℹ 这通常意味着您使用=
的是==
. ℹ 你的意思是.cols == c(2001:2003)
?
解决方案
您可以按列过滤。利用across
df %>%
pivot_wider(names_from = year, values_from = rank) %>%
filter(rowSums(!across(`2001`:`2003`, is.na)) > 0L)
输出
# A tibble: 3 x 5
category other `2001` `2002` `2003`
<chr> <chr> <dbl> <dbl> <dbl>
1 a x 12 NA NA
2 a y NA 25 NA
3 b x NA NA 65
推荐阅读
- javascript - Discord Bot 生成错误:“消息未定义”
- c++ - 指向 C++ 中函数的指针,(*pf)() 和 pf 是否相同?
- bash - 了解为什么 git-filter-branch 没有清理我的历史记录
- python - 具有可变和不可变属性的数据类样式对象?
- arrays - React 渲染另一个匹配当前组件的组件
- python - 更新到 tensorflow 2.0:keras 中的时代概念
- ios - 在 iOS 应用程序和框架之间通过内存引用共享数据
- python - 如何通过另一个循环循环字典?
- php - 如何通过自己的加密值更新每一行
- django - 如何找到 acme 挑战响应?