按多个条件

时间:2018-04-13 16:07:45

标签: r for-loop if-statement datatable

我们说我有一个数据表:

> a<-data.table(col1=c(7,85,1905,22,250))
   col1
1:    7
2:   85
3: 1905
4:   22
5:  250

我想在同一数据表中添加一个新列,考虑到这些条件:

if col1(i) <10 then "A"
else if col1(i) <100 then "B"
else if col1(i) <1000 then "C"
else "D"

所以,我获得

   col1 col2
1:    7    A
2:   85    B
3: 1905    D
4:   22    B
5:  250    C

我尝试了ifelse方法,但它放了&#34; A&#34;在所有列中,doc表示此方法仅适用于它使用的向量的第一个元素。

dt[, col2 := ifelse(col1 < 10,'A','B')]

我不想使用复杂的长循环来做到这一点,所以如果有人能解释它在R中是如何运作的,我会感激不尽。

问候。

1 个答案:

答案 0 :(得分:2)

cut对您来说是个不错的选择,这样您就可以避免使用嵌套的ifelse

> a[, col2:=cut(a$col1, 
                breaks=c(-Inf,10,100,1000,Inf), 
                include.lowest = TRUE, 
                labels=c("A", "B", "C", "D"))]
> a
   col1 col2
1:    7    A
2:   85    B
3: 1905    D
4:   22    B
5:  250    C