我的数据中有一列只有与错误代码时间相对应的分钟。我想创建一个名为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,我做错了什么?为什么不创建一个新的列,其中变量1到4对应于每个十五分钟的间隔?
我还是R的新手,我猜我有一些非常明显的错误。
答案 0 :(得分:1)
您已使用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
答案 1 :(得分:1)
这将成为您正在寻找的因素:
.filter('parseDate', function () {
return function (date) {
if (angular.isDate(date)) return date;
return new Date(Date.parse(date.replace(/:\d{2}[.,]\d{3}Z$/, '')));
};
});
var start_time = "2017-08-29T17:15:16.814Z";
$scope.start_date = $filter('parseDate')(start_time);
答案 2 :(得分:0)
使用 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]