質問

私は、ビン/離散化したい正の数字を含むベクトルXを持っています。このベクトルの場合、数値[0、10]がベクトルに存在するのと同じように表示されたいのですが、数字[10、∞]は10+であることを望みます。

私が使用しています:

x <- c(0,1,3,4,2,4,2,5,43,432,34,2,34,2,342,3,4,2)
binned.x <- as.factor(ifelse(x > 10,"10+",x))

しかし、これは私にはklugeyを感じます。誰かがより良い解決策や別のアプローチを知っていますか?

役に立ちましたか?

解決

どうですか cut:

binned.x <- cut(x, breaks = c(-1:9, Inf), labels = c(as.character(0:9), '10+'))

それは得られます:

 # [1] 0   1   3   4   2   4   2   5   10+ 10+ 10+ 2   10+ 2   10+ 3   4   2  
 # Levels: 0 1 2 3 4 5 6 7 8 9 10+

他のヒント

あなたの質問は一貫性がありません。
説明で 10 「10+」グループに属しますが、コード内 10 分離レベルです。もしも 10 したほうがいい 「10+」グループにある場合、コードする必要があります

as.factor(ifelse(x >= 10,"10+",x))

この場合、データを10に切り捨てることができます(要因が必要ない場合):

pmin(x, 10)
# [1]  0  1  3  4  2  4  2  5 10 10 10  2 10  2 10  3  4  2 10
x[x>=10]<-"10+"

これにより、文字列のベクトルが得られます。使用できます as.numeric(x) 数字に戻すには( "10+"になります NA)、 また as.factor(x) 上記の結果を得るため。

これにより、元のベクトル自体が変更されるため、別のベクトルにコピーしてそれに取り組むことをお勧めします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top