选择在 R 中至少有一个非缺失值的组
Pick groups that have at least one non-missing value in R
我有一个纵向数据,我想推断其变量之一。我需要按组织的 ID 对数据进行分组,并保留那些 groups/organizations 至少具有该变量(预算)的一个非缺失值的那些。这意味着由于数据的纵向性质,应该单独推断组织。我使用了很多不同的函数和代码,但其中 none 有效。我认为它应该起作用的最简单的方法之一如下:
DataX %>%
group_by(orgcode) %>%
filter(!is.na(budget) >= 1) %>%
mutate(budget=na.spline(budget))
问题是过滤器只保留非缺失行,不考虑分组,所以无法执行外推。你知道我做错了什么吗?非常感谢!
如果我们有一个可重现的示例会更好,但是让我们创建一个玩具版本的数据:
DataX <- data.frame(orgcode = rep(LETTERS[1:5], each = 3),
budget = c(NA, 21000, 22000,
30000, NA, 40000,
NA, NA, NA,
12000, 15000, 14000,
NA, NA, NA))
DataX
#> orgcode budget
#> 1 A NA
#> 2 A 21000
#> 3 A 22000
#> 4 B 30000
#> 5 B NA
#> 6 B 40000
#> 7 C NA
#> 8 C NA
#> 9 C NA
#> 10 D 12000
#> 11 D 15000
#> 12 D 14000
#> 13 E NA
#> 14 E NA
#> 15 E NA
我们可以看到具有 orgcode
C 和 E 的组织具有所有 NA
值,应将其删除。我们可以通过使用虚拟变量来确定每个组是否为 all(is.na(budget))
并对其进行过滤来做到这一点:
library(dplyr)
DataX %>%
group_by(orgcode) %>%
mutate(allNA = !all(is.na(budget))) %>%
filter(allNA) %>%
select(-allNA)
#> # A tibble: 9 x 2
#> # Groups: orgcode [3]
#> orgcode budget
#> <fct> <dbl>
#> 1 A NA
#> 2 A 21000
#> 3 A 22000
#> 4 B 30000
#> 5 B NA
#> 6 B 40000
#> 7 D 12000
#> 8 D 15000
#> 9 D 14000
由 reprex package (v0.3.0)
于 2020-07-29 创建
我有一个纵向数据,我想推断其变量之一。我需要按组织的 ID 对数据进行分组,并保留那些 groups/organizations 至少具有该变量(预算)的一个非缺失值的那些。这意味着由于数据的纵向性质,应该单独推断组织。我使用了很多不同的函数和代码,但其中 none 有效。我认为它应该起作用的最简单的方法之一如下:
DataX %>%
group_by(orgcode) %>%
filter(!is.na(budget) >= 1) %>%
mutate(budget=na.spline(budget))
问题是过滤器只保留非缺失行,不考虑分组,所以无法执行外推。你知道我做错了什么吗?非常感谢!
如果我们有一个可重现的示例会更好,但是让我们创建一个玩具版本的数据:
DataX <- data.frame(orgcode = rep(LETTERS[1:5], each = 3),
budget = c(NA, 21000, 22000,
30000, NA, 40000,
NA, NA, NA,
12000, 15000, 14000,
NA, NA, NA))
DataX
#> orgcode budget
#> 1 A NA
#> 2 A 21000
#> 3 A 22000
#> 4 B 30000
#> 5 B NA
#> 6 B 40000
#> 7 C NA
#> 8 C NA
#> 9 C NA
#> 10 D 12000
#> 11 D 15000
#> 12 D 14000
#> 13 E NA
#> 14 E NA
#> 15 E NA
我们可以看到具有 orgcode
C 和 E 的组织具有所有 NA
值,应将其删除。我们可以通过使用虚拟变量来确定每个组是否为 all(is.na(budget))
并对其进行过滤来做到这一点:
library(dplyr)
DataX %>%
group_by(orgcode) %>%
mutate(allNA = !all(is.na(budget))) %>%
filter(allNA) %>%
select(-allNA)
#> # A tibble: 9 x 2
#> # Groups: orgcode [3]
#> orgcode budget
#> <fct> <dbl>
#> 1 A NA
#> 2 A 21000
#> 3 A 22000
#> 4 B 30000
#> 5 B NA
#> 6 B 40000
#> 7 D 12000
#> 8 D 15000
#> 9 D 14000
由 reprex package (v0.3.0)
于 2020-07-29 创建