R:使用基于特定行分组的值创建一个列

时间:2015-06-09 19:33:13

标签: r group-by dataframe

以下是一个示例数据框

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&amp; B. A型组(101,102,103,401,402,403)在一起&amp; 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   

请注意,订单也已更改。我只是知道如何做到这一点。请提出一些解决方法。

1 个答案:

答案 0 :(得分:2)

尝试

log n

或者

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

更新

对于3组,创建示例向量

 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

或者

 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"