使用r中的数据集位置进行筛选



我不太熟悉r中的dplyr函数,但是,我想将我的数据集过滤到某些条件。

假设我的数据集中有超过100个属性。并且我想执行具有多个条件的过滤器。

我可以把我的编码过滤器列的位置,而不是他们的名称,如下所示:

y = filter(retag, c(4:50) != 8 & c(90:110) == 8)

我已经尝试了几次类似的编码,但仍然没有得到结果。

我也尝试编码如下,但不确定如何添加另一个条件到rowsum函数。

retag[rowSums((retag!=8)[,c(4:50)])>=1,]

我发现的唯一的例子是使用数据集名称而不是位置。

或者是否有任何方法使用数据集位置作为我的数据相当大的过滤。

可以使用filter()across()的组合。我没有你版本的retag数据框架,所以我创建了我自己的作为一个例子

set.seed(2000)
retag <- tibble(
col1 = runif(n = 1000, min = 0, max = 10) %>% round(0),
col2 = runif(n = 1000, min = 0, max = 10) %>% round(0),
col3 = runif(n = 1000, min = 0, max = 10) %>% round(0),
col4 = runif(n = 1000, min = 0, max = 10) %>% round(0),
col5 = runif(n = 1000, min = 0, max = 10) %>% round(0)
)
# filter where the first, second, and third column all equal 5 and the fourth column does not equal 5
retag %>%
filter(
across(1:3, function(x) x == 5), 
across(4, function(x) x != 5)
)

if_all()if_any()最近被引入到tidyverse中,目的是过滤多个变量。

library(dplyr)
filter(retag, if_all(X:Y, ~ .x > 10 & .x < 35))
# # A tibble: 5 x 2
#       X     Y
#   <int> <int>
# 1    11    30
# 2    12    31
# 3    13    32
# 4    14    33
# 5    15    34
filter(retag, if_any(X:Y, ~ .x == 2 | .x == 25))
# # A tibble: 2 x 2
#       X     Y
#   <int> <int>
# 1     2    21
# 2     6    25

数据
retag <- structure(list(X = 1:20, Y = 20:39), row.names = c(NA, -20L), class = c("tbl_df", 
"tbl", "data.frame"))

这是一个基本R选项。

这将选择在列4到50中不存在8并且在列90到110中至少存在一个8的行。

result <- retag[rowSums(retag[4:50] == 8, na.rm = TRUE) == 0 & 
rowSums(retag[90:110] == 8,na.rm = TRUE) > 0, ]

相关内容

  • 没有找到相关文章

最新更新