R 如何基于因子水平对观测值进行子集

R 如何基于因子水平对观测值进行子集,r,subset,cut,R,Subset,Cut,我有一个数据框架,需要根据一个变量(向量)的值将观察值分组为相等数量的组。下面是一个例子,我使用剪切函数来创建基于向量A值的因子。它创建三个级别,向量A的每个值都属于一个级别/组。现在,我如何根据X的切割级别提取/引用向量A值。例如,如果我想选择属于级别1:[1.2.33]的观察值,如何进行 > A<-1:5 > X<-cut(A,breaks=quantile(A,probs=c(0:3)/3),labels=1:3,include.lowest=TRUE) &

我有一个数据框架,需要根据一个变量(向量)的值将观察值分组为相等数量的组。下面是一个例子,我使用剪切函数来创建基于向量A值的因子。它创建三个级别,向量A的每个值都属于一个级别/组。现在,我如何根据X的切割级别提取/引用向量A值。例如,如果我想选择属于级别1:[1.2.33]的观察值,如何进行

> A<-1:5  
> X<-cut(A,breaks=quantile(A,probs=c(0:3)/3),labels=1:3,include.lowest=TRUE)  
> A  
[1] 1 2 3 4 5  
> X  
[1] [1,2.33]    [1,2.33]    (2.33,3.67] (3.67,5]    (3.67,5]   
Levels: [1,2.33] (2.33,3.67] (3.67,5]
>A X A
[1] 1 2 3 4 5  
>X
[1] [1,2.33]    [1,2.33]    (2.33,3.67] (3.67,5]    (3.67,5]   
级别:[1,2.33](2.33,3.67](3.67,5]

这里有一个比您提供的更好的示例:

> v <-1:10
> X <- cut(v, breaks=quantile(v,probs=c(0:3)/3), labels=letters[1:3], include.lowest=TRUE)
> X
 [1] a a a a b b b c c c
Levels: a b c

您的代码至少有2个不一致。1.您定义了
A
,然后使用
A
。2.您在
标签上有一个打字错误,这会导致类似于范围的级别。如果我想创建很多组,例如百分位,我想根据百分位组号对观察进行分组。而不是通过指定范围来指定子集是否有一种方法可以自动为每个观察值分配百分位数组号/指数?(类似于SAS中的Proc Rank)我如何将它们标记为1,2,3以对组进行排序,而不是标记为a、b、c?您只需使用
labels=1:3
,我将其更改为字母以突出显示它们是标签,因为示例数据也是整数。
> v[X=="a"]
[1] 1 2 3 4