R:如何将变量拆分为命名区间?

时间:2016-05-06 01:38:49

标签: r

我正在研究R中一个相当大的数据集,它包含一个连续的数字变量。在另一个数据集中,我命名了由最小值和最大值描述的区间,我想将其应用于我的大型数据集中的连续变量。

下面是一些示例代码:

df<-data.frame(x=c(1:6))    
groups<-data.frame(cat=c("a","b","c","d"), min=c(1,2,4,6), max=c(2,4,5,8))

我想创建一个新列df$cat,以便df$x的值在groups数据框中找到的最小 - 最大boudaries中。 理想情况下,我希望groups$min >= df$x > groups$max

> df
  x cat
1 1   a
2 2   b
3 3   b
4 4   c
5 5   d
6 6   d

有没有简单的方法可以做到这一点?

2 个答案:

答案 0 :(得分:2)

设置数据:

df <- data.frame(x=c(1:6))    
groups <- data.frame(cat=c("a","b","c","d"), min=c(1,2,4,6), max=c(2,4,5,8))

cut()与指定的labels参数一起使用:

brks <- c(groups$min,tail(groups$max,1))
df$cat <- cut(df$x,breaks=brks,labels=groups$cat,right=FALSE)

答案 1 :(得分:0)

df<-data.frame(x=c(1:6))
groups<-data.frame(cat=c("a","b","c","d"), min=c(1,2,4,6), max=c(2,4,5,8))

for(i in 1:nrow(groups)){

  numbers_in_range = df$x[df$x >= groups[i,]$min & df$x <= groups[i,]$max]
  df[,i+1] = df$x %in% numbers_in_range
  colnames(df)[2:ncol(df)] = as.character(groups$cat)

}

这样的事情会告诉你哪些数字在哪个组范围内。这就是你追求的目标吗?