【发布时间】:2018-02-12 21:55:03
【问题描述】:
我正在尝试使用dyplr 的filter 函数从tbl 中过滤掉NA、NaN 和Inf 值。
诀窍是我只想将过滤器应用于名称包含特定模式的列。模式为:r1、r2、r3等。
我试图结合grep 和filter 来实现这一点,但无法让它发挥作用。我当前的代码如下所示:
filter_(!is.na(grep("r[1-9]", colnames(DF), value = TRUE))
& !is.infinite(grep("r[1-9]", colnames(DF), value = TRUE))
& !is.nan(grep("r[1-9]", colnames(DF), value = TRUE)))
但是,此代码返回一条警告消息:“将向量截断为长度 1。” 并且返回的数据是未经过滤的。
我怀疑是这里的is.na 函数导致了问题,因为我在网上看到了一个示例,您可以使用正常条件(即condition == value)将grep 应用于filter,而不是基于is.na的条件
【问题讨论】:
-
你能提供一个reproducible example 你的数据集吗?
-
我认为问题在于您正在测试
colnames(DF)的NA、NaN和Inf,而它应该是这些列中的值。 (与您的模式匹配的那些r[1-9]。)