R 根据多个条件为值集创建新列

R 根据多个条件为值集创建新列,r,for-loop,if-statement,datatable,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 我尝试了ifelse方法,但它在所有列中都放上了“A”,并且doc表示该方法只对它使用的向量的第一个元素有效 dt[,col2:=ifelse(col1

假设我有一个数据表:

> a<-data.table(col1=c(7,85,1905,22,250))
   col1
1:    7
2:   85
3: 1905
4:   22
5:  250
我尝试了
ifelse
方法,但它在所有列中都放上了“A”,并且
doc
表示该方法只对它使用的向量的第一个元素有效

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

我不想使用复杂的长循环来实现这一点,所以如果有人能解释它在
R
中的工作原理,我将不胜感激


注意。

cut
是一个不错的选择,这样可以避免使用嵌套的
ifelse
s

> 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

cut
是一个很好的选择,这样可以避免使用嵌套的
ifelse
s

> 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

知道了。谢谢JilbertI想知道如何对
字符的向量做同样的处理,所以我考虑将其转换为
因子,然后再转换为
数值。例如,返回
1
if
a
2
if
b
3
if
c
4
如果还有其他任何情况:
a[,col2:=as.numeric(as.numeric(as.factor(col1)),breaks=c(-Inf,1,2,3,Inf),include.lost=TRUE,labels=c(1,2,3,4))
col1 col2
1:A1
2:B2
3:C3
4:D4
5:E4
。有更好的方法吗?明白了。谢谢JilbertI想知道如何对
字符的向量做同样的处理,所以我考虑将其转换为
因子,然后再转换为
数值。例如,返回
1
if
a
2
if
b
3
if
c
4
如果还有其他任何情况:
a[,col2:=as.numeric(as.numeric(as.factor(col1)),breaks=c(-Inf,1,2,3,Inf),include.lost=TRUE,labels=c(1,2,3,4))
col1 col2
1:A1
2:B2
3:C3
4:D4
5:E4
。有更好的方法吗?
> 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