我在R中有一个数据框,如下所示...
Year Month Day Hour DateTime
1950 1 4 12 1/4/1950 12:00
1950 1 4 13 1/4/1950 13:00
1950 1 4 14 1/4/1950 14:00
1950 1 4 15 1/4/1950 15:00
1950 1 4 18 1/4/1950 18:00
1950 1 4 21 1/4/1950 21:00
1950 1 4 22 1/4/1950 22:00
1950 1 5 23 1/5/1950 23:00
数据来自年份(1950-2017)和月份(1-12)天(1-31)小时(0-23),我想创建一个向量,将连续的观测值相加,即彼此对立的观察。 例如,创建的列向量中的前几个数字应为(4,1,3),因为前四个观察值是连续的,下一个不是连续的,然后下三个是连续的。
答案 0 :(得分:4)
我们用difftime
检查相邻日期之间的差,检查差是否不等于1,使用rle
来获取计数
dt <- as.POSIXct(df1$DateTime, format = "%m/%d/%Y %H:%M")
rle(cumsum(c(TRUE, difftime(dt[-1], dt[-length(dt)], unit = "hour") != 1)))$lengths
#[1] 4 1 2 1
或者如@Ryan所述,也可以使用diff
rle(cumsum(c(TRUE, diff(dt, unit = "hour") != 1)))$lengths
df1 <- structure(list(Year = c(1950L, 1950L, 1950L, 1950L, 1950L, 1950L,
1950L, 1950L), Month = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), Day = c(4L,
4L, 4L, 4L, 4L, 4L, 4L, 5L), Hour = c(12L, 13L, 14L, 15L, 18L,
21L, 22L, 23L), DateTime = c("1/4/1950 12:00", "1/4/1950 13:00",
"1/4/1950 14:00", "1/4/1950 15:00", "1/4/1950 18:00", "1/4/1950 21:00",
"1/4/1950 22:00", "1/5/1950 23:00")), class = "data.frame", row.names = c(NA,
-8L))
答案 1 :(得分:3)
我们可以使用clf = svm.SVC(kernel='linear', C=1)
scores = cross_val_score(clf, X, y, cv=10)
print scores
工具和tidyverse
创建连续运行的组索引,然后获取每个组中的行数。请注意,由于数据的最后一行与倒数第二行不是连续的,因此我不会重现您的预期输出。
cumsum
由reprex package(v0.2.0)于2018-10-02创建。