web-dev-qa-db-ja.com

整数列のビン化された値を含む列を追加します

いくつかの列を持つデータフレームがあります。それらの列の1つはランクで、1から20までの整数です。「1-4」、「5-10」、「11-」のようなビン値を含む別の列を作成したいと思います。 15 "、" 16-20 "。

これを行うための最も効果的な方法は何ですか?

私が持っているデータフレームは次のようになります(.csv形式):

rank,name,info
1,steve,red
3,joe,blue
6,john,green
3,liz,yellow
15,jon,pink

データフレームに別の列を追加したいので、次のようになります。

rank,name,info,binValue
1,steve,red,"1-4"
3,joe,blue,"1-4"
6,john,green, "5-10"
3,liz,yellow,"1-4"
15,jon,pink,"11-15"

Data.frameをそのまま維持し、df $ rankedの値が指定された範囲内にある場合は別の列を追加したいので、現在の方法は機能していません。ありがとうございました。

21
wespiserA

見る ?cutそしてbreaks(そして多分labels)を指定します。

x$bins <- cut(x$rank, breaks=c(0,4,10,15), labels=c("1-4","5-10","10-15"))
x
#   rank  name   info  bins
# 1    1 steve    red   1-4
# 2    3   joe   blue   1-4
# 3    6  john  green  5-10
# 4    3   liz yellow   1-4
# 5   15   jon   pink 10-15
45
Joshua Ulrich
dat <- "rank,name,info
1,steve,red
3,joe,blue
6,john,green
3,liz,yellow
15,jon,pink"

x <- read.table(textConnection(dat), header=TRUE, sep=",", stringsAsFactors=FALSE)
x$bins <- cut(x$rank, breaks=seq(0, 20, 5), labels=c("1-5", "6-10", "11-15", "16-20"))
x

  rank  name   info  bins
1    1 steve    red   1-5
2    3   joe   blue   1-5
3    6  john  green  6-10
4    3   liz yellow   1-5
5   15   jon   pink 11-15
6
Andrie

パッケージcutrからsmart_cutを使用できます。

# devtools::install_github("moodymudskipper/cutr")
library(cutr)

@Andrieのサンプルデータの使用:

x$bins <- smart_cut(x$rank,
                    c(1,5,11,16), 
                    labels = ~paste0(.y[1],'-',.y[2]-1), 
                    simplify = FALSE)
# rank  name   info  bins
# 1    1 steve    red   1-4
# 2    3   joe   blue   1-4
# 3    6  john  green  5-10
# 4    3   liz yellow   1-4
# 5   15   jon   pink 11-15

cutrとsmart_cutの詳細

2