use*_*783 3 r frequency subset
我想生成一个df,它选择与"ID"相关联的行,而"ID"又与一个名为cutoff的变量相关联.对于此示例,我将cutoff设置为9,这意味着我想在df1中选择其ID值与超过9行相关联的行.我的代码的最后一行生成了一个我不明白的df.正确的df将有24行,ID列中都有3行或4行.有人可以解释我的最后一行代码实际上在做什么并建议采用不同的方法吗?
set.seed(123)
ID<-rep(c(1,2,3,4,5),times=c(5,7,9,11,13))
sub1<-rnorm(45)
sub2<-rnorm(45)
df1<-data.frame(ID,sub1,sub2)
IDfreq<-count(df1,"ID")
cutoff<-9
df2<-subset(df1,subset=(IDfreq$freq>cutoff))
Run Code Online (Sandbox Code Playgroud)
df1[ df1$ID %in% names(table(df1$ID))[table(df1$ID) >9] , ]
Run Code Online (Sandbox Code Playgroud)
这将测试 df1$ID 值是否在具有超过 9 个值的类别中。如果是,则返回向量的逻辑元素将为 TRUE,而“i”参数将导致[
-function 返回整行,因为“j”项为空。
看:
?`[`
?'%in%'
Run Code Online (Sandbox Code Playgroud)
使用 dplyr
library(dplyr)
df1 %>%
group_by(ID) %>%
filter(n()>cutoff)
Run Code Online (Sandbox Code Playgroud)
也许更接近您的想法是使用ave
以下方法创建频率向量:
subset(df1, ave(ID, ID, FUN = length) > cutoff)
Run Code Online (Sandbox Code Playgroud)