r - 如果 R 中的数据帧中的任何条目是无限的,则删除组

标签 r dplyr

我有 3 个组,我已经为 4 个变量收集了 12 个月的数据 对于某些 group * month 组合,任何变量都可能具有 -Inf 值。

temp <- data.frame(group_id = rep(1:3, each = 12),
                 Month = rep(1:12, times = 3),
                 var1 = c(-Inf, rnorm(35)),
                 var2 = rnorm(36),
                 var3 = rnorm(36),
                 var4 = c(rnorm(35), -Inf))

在上面的示例数据中,应该删除第 1 组和第 3 组,只保留第 2 组。

我有一个相当繁琐的方法来实现它。我在我的每一列中查找任何给定组是否存在无限值,然后将它们删除,如下所示。问题是如果我有超过 4 个变量,这将变得相当冗长。

library(dplyr)

group_to_keep <- 
temp %>% 
dplyr::group_by(group_id) %>%
dplyr::summarise(var1_inf = sum(is.infinite(var1)),
                 var2_inf = sum(is.infinite(var2)),
                 var3_inf = sum(is.infinite(var3)),
                 var4_inf = sum(is.infinite(var4))) %>%
rowwise %>%
dplyr::mutate(row_sum = sum(var1_inf:var4_inf)) %>%
dplyr::mutate(row_sum = ifelse(row_sum != 0, NA, row_sum)) %>%
tidyr::drop_na()

temp %>% dplyr::filter(group_id %in% group_to_keep$group_id)

最佳答案

dplyrpurrr 选项可以是:

temp %>%
 group_by(group_id) %>%
 filter(all(pmap_lgl(across(var1:var4), ~ sum(is.infinite(c(...))) == 0)))

   group_id Month    var1    var2    var3    var4
      <int> <int>   <dbl>   <dbl>   <dbl>   <dbl>
 1        2     1 -0.598  -1.92   -0.909  -0.504 
 2        2     2 -0.475  -0.376  -0.0863  0.750 
 3        2     3 -0.653   0.839   0.407  -0.841 
 4        2     4  0.0454 -0.524  -0.0168 -0.0497
 5        2     5  1.03   -0.215   1.09    1.12  
 6        2     6  1.87   -1.12    1.28   -1.78  
 7        2     7  1.46   -1.48    1.08   -1.18  
 8        2     8 -0.462  -0.304  -1.29   -2.02  
 9        2     9 -0.0585 -0.654   0.415   0.892 
10        2    10 -0.229  -1.11   -0.670  -0.696 
11        2    11  1.03    0.0637 -0.718  -0.0300
12        2    12  0.454  -2.14   -0.199   0.142 

关于r - 如果 R 中的数据帧中的任何条目是无限的,则删除组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66228010/

相关文章:

r - 如何在 ggplot2 中为已指定大小美学的形状添加更大的边框?

R,具有函数边界的二重积分

r - 使用 'summarise' 的数据帧列的第二(或第三)最大值

r - 通过保持连续三天的行日期来过滤数据帧,最好使用 dplyr

r - 如何清楚地可视化总和为相同值的多个类别的计数

r - 如何在 R 中绘制时间序列类型的图

r - dplyr 过滤器仅获取其中一组采用的值

r - 为什么有时我必须将 `.` 包含在 `data.frame()` 中,以便为 `do` 中的命名参数?

r - 抑制 R 中的静态代码检查( future 包)

r - 将科学记数法中的 p 值格式化为常规