我试图根据数据类型将数据分类到不同的组中。我的数据和代码如下:
bank ROE
bank1 0.73
bank2 0.94
bank3 0.62
bank4 0.57
bank5 0.31
bank6 0.53
bank7 0.39
bank8 0.01
bank9 0.16
bank10 0.51
bank11 0.84
bank12 0.18
sob <- c('bank1', 'bank2','bank3',)
fob <- c('bank4','bank5', 'bank6')
jov <- c('bank7', 'bank8','bank9', 'bank10','bank11')
test$type <- ifelse(test$bank == sob, 1, ifelse(test$bank == fob, 2, ifelse(test$bank == jov, 3, 4)))
test
但是,由于类别显示错误,因此此代码无法正常工作,并且我得到以下警告:
Warning messages:
1: In is.na(e1) | is.na(e2) :
longer object length is not a multiple of shorter object length
2: In `==.default`(test1$bank, jov) :
longer object length is not a multiple of shorter object length
谁能告诉我我做错了什么,以及我应该怎么做才能做对?
谢谢
您应该使用%in%
-operator而不是标识-您正在此处与向量进行比较。
像这样:
test$type <- ifelse(test$bank %in% sob, 1, ifelse(test$bank %in% fob, 2, ifelse(test$bank %in% jov, 3, 4)))
> test
bank ROE type
1 bank1 0.73 1
2 bank2 0.94 1
3 bank3 0.62 1
4 bank4 0.57 2
5 bank5 0.31 2
6 bank6 0.53 2
7 bank7 0.39 3
8 bank8 0.01 3
9 bank9 0.16 3
10 bank10 0.51 3
11 bank11 0.84 3
12 bank12 0.18 4
另外,为了避免繁琐的if-else结构,可以对因子进行分类重置级别。
首先复制库变量test $ type <-test $ bank
然后,使用上面定义的向量(sob,fob,job)重新设置电平。请注意,最后一步'other'
被设置为剩余值,因为在其他向量中未定义bank12。
levels(test$type) <- list('sob' = sob,
'fob' = fob,
'jov' = jov,
'other' = 'bank12')
导致
> test
bank ROE type
1 bank1 0.73 sob
2 bank2 0.94 sob
3 bank3 0.62 sob
4 bank4 0.57 fob
5 bank5 0.31 fob
6 bank6 0.53 fob
7 bank7 0.39 jov
8 bank8 0.01 jov
9 bank9 0.16 jov
10 bank10 0.51 jov
11 bank11 0.84 jov
12 bank12 0.18 other
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句