R编程,子集化数据和绘图

时间:2017-04-30 08:22:29

标签: r

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

等等。

1 个答案:

答案 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))