R - 我有一个数据帧,在列中有0和1,我找到了切换发生的行索引,现在我想通过设置这些特定的行IDS从这些数据中取样数据? 这是数据:
row id mode
1 0
2 0
3 1
4 1
5 0
6 0
7 0
8 1
9 1
10 1
分割数据帧后,应该有4个新的数据帧:
y[1] :
row id mode
1 0
2 0
y[2]
row id mode
3 1
4 1
y[3]
row id mode
5 0
6 0
7 0
等等。
答案 0 :(得分:2)
我们可以根据“模式”中相邻元素的差异创建分组变量,并基于该数据集创建split
split(df1, cumsum(c(TRUE, diff(df1$mode)!=0)))
#$`1`
# row id mode
#1 1 0
#2 2 0
#$`2`
# row id mode
#3 3 1
#4 4 1
#$`3`
# row id mode
#5 5 0
#6 6 0
#7 7 0
#$`4`
# row id mode
#8 8 1
#9 9 1
#10 10 1
或另一种选择是使用rleid
data.table
library(data.table)
split(df1, rleid(df1$mode))
或使用rle
base R
split(df1, with(rle(df1$mode), rep(seq_along(values), lengths)))
df1 <- structure(list(`row id` = 1:10, mode = c(0L, 0L, 1L, 1L, 0L,
0L, 0L, 1L, 1L, 1L)), .Names = c("row id", "mode"),
class = "data.frame", row.names = c(NA, -10L))