如何显示 R 中丢弃的观察值的数量?
How to show the number of dropped observations in R?
对于不同的分析,我使用不同的样本,但我需要让样本的来源透明化。 Stata 在每个 drop 命令后显示 "XX observations dropped"。有没有办法让 R 说明在“tidyverse 样式”样本选择期间丢弃在控制台中的观察数量(见下文)?在此示例中,我想在控制台中查看使用 filter 命令和 drop_na 命令删除了多少观察值。我尝试了 summarise_all(~sum(is.na(.)))
但没有成功。
capmkt_df <- stata_df %>%
filter(change != 1 & reg_mkt == 1) %>%
select(any_of(capmkt_vars)) %>%
mutate_at(vars(country, year), factor) %>%
drop_na()
由于您使用的是 tidyverse
包,因此 tidylog
是一个很好的资源,该包为很多 tidyverse
(包括 dplyr
和tidyr
) 函数。
例如,使用 drop_na
,您将收到一条消息 drop_na: removed X rows
。基本 R airquality
数据集的插图:
library(tidyverse)
library(tidylog, warn.conflicts = F)
air_quality %>%
drop_na()
# drop_na: removed 42 rows (27%), 111 rows remaining
# Ozone Solar.R Wind Temp Month Day
# 1 41 190 7.4 67 5 1
# 2 36 118 8.0 72 5 2
# 3 12 149 12.6 74 5 3
# 4 18 313 11.5 62 5 4
# 5 23 299 8.6 65 5 7
# 6 19 99 13.8 59 5 8
# 7 8 19 20.1 61 5 9
# 8 16 256 9.7 69 5 12
# 9 11 290 9.2 66 5 13
# 10 14 274 10.9 68 5 14
# ...
一个选项是在删除 NA
值之前打印非 complete.cases
的总和。在这里,我们可以使用 magrittr
中的三通管 (%T>%
) 来打印结果。
library(tidyverse)
df %>%
filter(x %in% c(1, 2, NA)) %T>%
{print(sum(!complete.cases(.)))} %>%
drop_na()
输出
因此,您会看到删除了 2 行,因为它们都有 NA
s。
[1] 2
# A tibble: 1 × 2
x y
<dbl> <chr>
1 1 a
因此,对于您的代码,您可以这样写:
capmkt_df <- stata_df %>%
filter(change != 1 & reg_mkt == 1) %>%
select(any_of(capmkt_vars)) %>%
mutate_at(vars(country, year), factor) %T>%
{print(sum(!complete.cases(.)))} %>%
drop_na()
数据
df <- structure(list(x = c(1, 2, NA), y = c("a", NA, "b")), class = c("tbl_df",
"tbl", "data.frame"), row.names = c(NA, -3L))
对于不同的分析,我使用不同的样本,但我需要让样本的来源透明化。 Stata 在每个 drop 命令后显示 "XX observations dropped"。有没有办法让 R 说明在“tidyverse 样式”样本选择期间丢弃在控制台中的观察数量(见下文)?在此示例中,我想在控制台中查看使用 filter 命令和 drop_na 命令删除了多少观察值。我尝试了 summarise_all(~sum(is.na(.)))
但没有成功。
capmkt_df <- stata_df %>%
filter(change != 1 & reg_mkt == 1) %>%
select(any_of(capmkt_vars)) %>%
mutate_at(vars(country, year), factor) %>%
drop_na()
由于您使用的是 tidyverse
包,因此 tidylog
是一个很好的资源,该包为很多 tidyverse
(包括 dplyr
和tidyr
) 函数。
例如,使用 drop_na
,您将收到一条消息 drop_na: removed X rows
。基本 R airquality
数据集的插图:
library(tidyverse)
library(tidylog, warn.conflicts = F)
air_quality %>%
drop_na()
# drop_na: removed 42 rows (27%), 111 rows remaining
# Ozone Solar.R Wind Temp Month Day
# 1 41 190 7.4 67 5 1
# 2 36 118 8.0 72 5 2
# 3 12 149 12.6 74 5 3
# 4 18 313 11.5 62 5 4
# 5 23 299 8.6 65 5 7
# 6 19 99 13.8 59 5 8
# 7 8 19 20.1 61 5 9
# 8 16 256 9.7 69 5 12
# 9 11 290 9.2 66 5 13
# 10 14 274 10.9 68 5 14
# ...
一个选项是在删除 NA
值之前打印非 complete.cases
的总和。在这里,我们可以使用 magrittr
中的三通管 (%T>%
) 来打印结果。
library(tidyverse)
df %>%
filter(x %in% c(1, 2, NA)) %T>%
{print(sum(!complete.cases(.)))} %>%
drop_na()
输出
因此,您会看到删除了 2 行,因为它们都有 NA
s。
[1] 2
# A tibble: 1 × 2
x y
<dbl> <chr>
1 1 a
因此,对于您的代码,您可以这样写:
capmkt_df <- stata_df %>%
filter(change != 1 & reg_mkt == 1) %>%
select(any_of(capmkt_vars)) %>%
mutate_at(vars(country, year), factor) %T>%
{print(sum(!complete.cases(.)))} %>%
drop_na()
数据
df <- structure(list(x = c(1, 2, NA), y = c("a", NA, "b")), class = c("tbl_df",
"tbl", "data.frame"), row.names = c(NA, -3L))