根据现有列中的数字将值分配给新列

时间:2018-07-15 21:28:15

标签: r

我有以下数据集:

Col_1 <- c(1:25)
Col_2 <- c(1, 1, 1, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 5, 5, 6, 7, 7, 7, 8, 8, 9, 9, 9, 9)
df <- cbind(Col_1, Col_2)
> df
      Col_1 Col_2
 [1,]     1     1
 [2,]     2     1
 [3,]     3     1
 [4,]     4     2
 [5,]     5     2
 [6,]     6     3
 [7,]     7     3
 [8,]     8     3
 [9,]     9     3
[10,]    10     3
[11,]    11     4
[12,]    12     4
[13,]    13     4
[14,]    14     5
[15,]    15     5
[16,]    16     6
[17,]    17     7
[18,]    18     7
[19,]    19     7
[20,]    20     8
[21,]    21     8
[22,]    22     9
[23,]    23     9
[24,]    24     9
[25,]    25     9

我想创建一个新列,如果'Col_2'中的值小于3的倍数,则将As分配给新列(Col_3),如果Col_2中的值小于1则将B赋给3的倍数,如果Col_3中的值是3的倍数,则为Cs。结果数据集应如下所示:

> df
      Col_1 Col_2 Col_3
 [1,] 1     1     A  
 [2,] 2     1     A  
 [3,] 3     1     A  
 [4,] 4     2     B  
 [5,] 5     2     B  
 [6,] 6     3     C  
 [7,] 7     3     C  
 [8,] 8     3     C  
 [9,] 9     3     C  
[10,] 10    3     C  
[11,] 11    4     A  
[12,] 12    4     A  
[13,] 13    4     A  
[14,] 14    5     B  
[15,] 15    5     B  
[16,] 16    6     C  
[17,] 17    7     A  
[18,] 18    7     A  
[19,] 19    7     A  
[20,] 20    8     B  
[21,] 21    8     B  
[22,] 22    9     C  
[23,] 23    9     C  
[24,] 24    9     C  
[25,] 25    9     C  

什么是最佳解决方案?谢谢!

1 个答案:

答案 0 :(得分:4)

我们可以使用%%创建新列

cbind(df,  Col_3 = LETTERS[(df[,2]-1) %% 3 + 1])