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
ifa
,2
ifb
,3
ifc
,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
ifa
,2
ifb
,3
ifc
,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