R:根据对特定行的分组创建一个包含值的列

R: Create a column with values based on grouping specific rows

这是一个示例数据框,

ID <- c(101,102,103,201,202,203,301,302,303,401,402,403) 
Point_A <- c(10,20,30,40,50,60,70,80,90,100,110,120) 
df <- data.frame(ID,Point_A)

     ID  Point_A
1    101   10 
2    102   20 
3    103   30 
4    201   40 
5    202   50 
6    203   60 
7    301   70 
8    302   80  
9    303   90  
10   401   100 
11   402   110 
12   403   120 

我想在 df 中创建一个名为 Type 的列,其中包含 2 个值 A 和 B。 A 类组 (101,102,103,401,402,403) 一起和 B 类组 (201,202,203,301,302,303) 一起。

我想要的输出是

     ID  Point_A Type 
1    101   10     A
2    102   20     A 
3    103   30     A 
4    401   100    A 
5    402   110    A 
6    403   120    A 
7    201   40     B 
8    202   50     B  
9    203   60     B  
10   301   70     B 
11   302   80     B 
12   303   90     B   

注意顺序也变了。我只是知道如何做到这一点。请提出一些解决方法。

尝试

 df$Type <- c('B', 'A')[(df$ID %in% c(101:103, 401:403))+1L]

或者

 df$Type <-  c('A', 'B')[(df$ID>103 & df$ID<401)+1L]

 df <- df[order(df$Type),]
 row.names(df) <- NULL
 df
    ID Point_A Type
1  101      10    A
2  102      20    A
3  103      30    A
4  401     100    A
5  402     110    A
6  403     120    A
7  201      40    B
8  202      50    B
9  203      60    B
10 301      70    B
11 302      80    B
12 303      90    B

更新

对于 3 个组,创建一个示例向量

 v1 <- c(df$ID, c(501, 502, 503, 601, 602, 603))
 c('A', 'B', 'C')[(v1 >103 & v1 <401)+ 2*(v1>=501)+1L]
 #[1] "A" "A" "A" "B" "B" "B" "B" "B" "B" "A" "A" "A" "C" "C" "C" "C" "C" "C"

或者

 library(car)
 recode(v1, '101:103="A";401:403="A";201:303="B";else="C"')
 #[1] "A" "A" "A" "B" "B" "B" "B" "B" "B" "A" "A" "A" "C" "C" "C" "C" "C" "C"