我正在研究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
有没有简单的方法可以做到这一点?
答案 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)
}
这样的事情会告诉你哪些数字在哪个组范围内。这就是你追求的目标吗?