R,if else语句只返回第二个循环



我的数据中有一列的分钟数与错误代码的时间相对应。我想创建一个名为I$rminute的新列,它将时间划分为四、十五分钟的间隔。

>for(j in i$rminute) {
if(i$rminute < 16){
i$r15intervals <- "1"
} else if(i$rminute < 31){
i$r15intervals <- "2"
} else if(i$rminute < 46){
i$r15intervals <- "3"
} else {
i$r15intervals <- "4"}}

>i$r15intervals <- as.factor(i$r15intervals)

> summary(i$r15intervals)
2 
78455 

所以它返回的唯一数字是2,我做错了什么?为什么它不创建一个新的列,其中包含对应于每15分钟间隔的变量1到4?

我还是R的新手,我想有一些很明显的事情我做错了。

您使用i$r15intervals <- #分配整列值,因此i$rminute中的最后一个数字可能在16到31之间。

通过执行i[j, "intervals"],仅为每个设置行值。

这是另一种不用for循环的方法

i = data.frame(rminute = sample(1:50, 20))

findInterval = function(x){
if(x< 16){
return("1")
} else if(x < 31){
return("2")
} else if(x< 46){
return("3")
} else {
return("4")}
}
i$r15interval = sapply(i$rminute, findInterval)
> head(i)
rminute r15interval
1       1           1
2      47           4
3      25           2
4      41           3
5      16           2
6      44           3

这将使您要查找的因素:

cut(i$rminute, c(0, 16, 31, 46, Inf), 1:4)

使用cut((函数:

cut(c(20,36,8,47),breaks = c(0,15,30,45,60))

输出为:

[1] (15,30] (30,45] (0,15]  (45,60] 
Levels: (0,15] (15,30] (30,45](45,60]

最新更新