添加包含整数列的分箱值的列

wes*_*erA 21 r r-faq

我有一个包含几列的数据框,其中一列是rank,一个介于1和20之间的整数.我想创建另一个包含bin值的列,如"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
Run Code Online (Sandbox Code Playgroud)

我想在数据框中添加另一列,所以它会是这样的:

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"
Run Code Online (Sandbox Code Playgroud)

我现在这样做的方式不起作用,因为我想保持data.frame完好无损,如果df $的值在给定范围内,则只添加另一列.谢谢.

Jos*_*ich 43

查看?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
Run Code Online (Sandbox Code Playgroud)


And*_*rie 6

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
Run Code Online (Sandbox Code Playgroud)