如何检查某些值是否为真
How to check if some values are true
我在 R 中经常使用 Any 和 All 函数,但我想要一些灵活性。是否有任何函数可以告诉我某个百分比的值是真还是假?
df
x
1 5
2 5
3 5
4 4
5 3
6 5
7 5
8 5
9 5
10 5
all(df$x==5)
[1] FALSE
any(df$x==5)
[1] TRUE
期望的输出
伪代码
60% of df == 5
TRUE
90% of df == 5
FALSE
我们可以使用逻辑向量的 mean
并检查该值是否等于特定百分比
mean(df$x== 5) >= 0.6
#[1] TRUE
或在管道中 (%>%
)
library(magrittr)
library(dplyr)
df %>%
pull(x) %>%
equals(5) %>%
mean %>%
is_weakly_greater_than(0.6)
#[1] TRUE
或者创建一个逻辑vector
的频率table并得到与prop.table
的比例
prop.table(table(df$x== 5))
# FALSE TRUE
# 0.2 0.8
数据
df <- structure(list(x = c(5L, 5L, 5L, 4L, 3L, 5L, 5L, 5L, 5L, 5L)),
class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6", "7", "8", "9", "10"))
你可以的,
(sum(x == 5) / length(x)) >= 0.6
#[1] TRUE
(sum(x == 5) / length(x)) >= 0.9
#[1] FALSE
注意: 您需要为要检查的百分比指定 >=
而不是 ==
以适应您的条件 60% 的 df == 5
除了相当全面的答案外,没什么可补充的,但这是一个有趣的问题。
数据
set.seed(123)
dta <- data.frame(colA = sample(x = 1:10, size = 20, replace = TRUE))
Vectorize
prop.table(table(Vectorize(isTRUE)(dta$colA == 5)))
# FALSE TRUE
# 0.85 0.15
更具体地针对您的问题:
Is there any function that tell me if a certain percent of the
values are true or false?
res_perc[["TRUE"]] == 0.15
# TRUE
rapportools::percent
使用简单的 percent
function available in rapportools
包。
rapportools::percent(dta$colA == 5)
# [1] 15
dplyr
结果还不错。
library(tidyverse)
dta %>%
count(colA == 5) %>%
mutate(n_pct = n / sum(n))
# A tibble: 2 x 3
# `colA == 5` n n_pct
# <lgl> <int> <dbl>
# 1 FALSE 17 0.85
# 2 TRUE 3 0.15
我在 R 中经常使用 Any 和 All 函数,但我想要一些灵活性。是否有任何函数可以告诉我某个百分比的值是真还是假?
df
x
1 5
2 5
3 5
4 4
5 3
6 5
7 5
8 5
9 5
10 5
all(df$x==5)
[1] FALSE
any(df$x==5)
[1] TRUE
期望的输出
伪代码
60% of df == 5
TRUE
90% of df == 5
FALSE
我们可以使用逻辑向量的 mean
并检查该值是否等于特定百分比
mean(df$x== 5) >= 0.6
#[1] TRUE
或在管道中 (%>%
)
library(magrittr)
library(dplyr)
df %>%
pull(x) %>%
equals(5) %>%
mean %>%
is_weakly_greater_than(0.6)
#[1] TRUE
或者创建一个逻辑vector
的频率table并得到与prop.table
prop.table(table(df$x== 5))
# FALSE TRUE
# 0.2 0.8
数据
df <- structure(list(x = c(5L, 5L, 5L, 4L, 3L, 5L, 5L, 5L, 5L, 5L)),
class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6", "7", "8", "9", "10"))
你可以的,
(sum(x == 5) / length(x)) >= 0.6
#[1] TRUE
(sum(x == 5) / length(x)) >= 0.9
#[1] FALSE
注意: 您需要为要检查的百分比指定 >=
而不是 ==
以适应您的条件 60% 的 df == 5
除了相当全面的答案外,没什么可补充的,但这是一个有趣的问题。
数据
set.seed(123)
dta <- data.frame(colA = sample(x = 1:10, size = 20, replace = TRUE))
Vectorize
prop.table(table(Vectorize(isTRUE)(dta$colA == 5)))
# FALSE TRUE
# 0.85 0.15
更具体地针对您的问题:
Is there any function that tell me if a certain percent of the values are true or false?
res_perc[["TRUE"]] == 0.15
# TRUE
rapportools::percent
使用简单的 percent
function available in rapportools
包。
rapportools::percent(dta$colA == 5)
# [1] 15
dplyr
结果还不错。
library(tidyverse)
dta %>%
count(colA == 5) %>%
mutate(n_pct = n / sum(n))
# A tibble: 2 x 3
# `colA == 5` n n_pct
# <lgl> <int> <dbl>
# 1 FALSE 17 0.85
# 2 TRUE 3 0.15