我有一个带有几列的数据框,其中一列是等级,介于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


,我想向数据帧中添加另一列,所以就像这样:

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的值在给定范围内,则只添加另一列。谢谢。

评论

相关:基于范围和R在R中创建分类变量,如何将数据分配到不同的组中

#1 楼

请参阅?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


评论


如何使用for循环并一次性为多个列分配类似功能?

– I_m_LeMarque
18年5月5日在15:37

#2 楼

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


#3 楼

我们可以使用软件包smart_cut中的cutr

# 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