我在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
答案 0 :(得分:5)
可以,
(sum(x == 5) / length(x)) >= 0.6
#[1] TRUE
(sum(x == 5) / length(x)) >= 0.9
#[1] FALSE
注意::您需要指定>=
而不是==
作为要检查的百分比,以适应 60%df = = 5
答案 1 :(得分:4)
我们可以使用逻辑向量的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
的频率表,并使用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"))
答案 2 :(得分:3)
要添加相当全面的答案,并不需要太多,但这是一个有趣的问题。
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
更具体地说,您的问题:
是否有任何函数可以告诉我是否有一定百分比的 值是真还是假?
res_perc[["TRUE"]] == 0.15
# TRUE
rapportools::percent
使用percent
软件包中提供的简单rapportools
功能。
rapportools::percent(dta$colA == 5)
# [1] 15
结果有点不错。
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