因子水平达到一定值

时间:2017-11-02 19:00:02

标签: r

我需要找出有多少因子水平达到连续变量的值。

下面的代码为示例数据生成了所需的结果,但这是一个尴尬的工作。

我的真实数据框要大得多,真实的图应该在x轴上显示更多的值(或连续)。我非常感谢适用的代码。

set.seed(5)   
df <- data.frame(ID = factor(c("a","a","b","c","d","e","e")),values = runif(7,0,6))
seq <- 1:5 
length.unique <- function(x) length(unique(x))

sub1 <- df[which(df$values >= 1), ]
sub2 <- df[which(df$values >= 2), ]
sub3 <- df[which(df$values >= 3), ]
sub4 <- df[which(df$values >= 4), ]
sub5 <- df[which(df$values >= 5), ]

N_IDs <- c(length.unique(sub1$ID),length.unique(sub2$ID),length.unique(sub3$ID),length.unique(sub4$ID),length.unique(sub5$ID))
plot(N_IDs ~ seq, type="b")

2 个答案:

答案 0 :(得分:1)

使用tidyverse,您可以通过首先计算每个ID的最大值来节省一些时间,

library(tidyverse)
idmax <- df %>% group_by(ID) %>% summarize(max=max(values)) %>% pull(max)

然后对于每个切割点,返回通过的计数

map_df(1:5, ~data.frame(cut=., count=sum(idmax >.)))
#   cut count
# 1   1     4
# 2   2     3
# 3   3     3
# 4   4     3
# 5   5     1

答案 1 :(得分:1)

使用非equi连接:

library(data.table)
setDT(df)

df[.(seq = 1:5), on = .(values >= seq), allow = T, .(N_IDs = uniqueN(ID)), by = .EACHI]
#   values N_IDs
#1:      1     4
#2:      2     3
#3:      3     3
#4:      4     3
#5:      5     1