在R中按行号拆分数据帧

时间:2014-11-25 16:49:24

标签: r split

这可能很简单,但我找不到解决方案:

df <- data.frame(replicate(10,sample(0:1,10,rep=TRUE)))

v <- c(3, 7)

有一种优雅的方法可以在v中指定的行号中将这个数据帧拆分为三个(列表中的)元素吗?

2 个答案:

答案 0 :(得分:10)

假设行1&2进入第一次分割,第二次3,4,5,67 to nrow(df)进入最后一次

 split(df, cumsum(1:nrow(df) %in% v))

但如果1:3行在第一次拆分中,那么4:7和第三次8 to nrow(df)

  split(df, cumsum(c(TRUE,(1:nrow(df) %in% v)[-nrow(df)])) )

或者@James在评论中提到,

  split(df, cumsum(1:nrow(df) %in% (v+1)))

答案 1 :(得分:7)

另一种方式:

split(df, findInterval(1:nrow(df), v))

对于替代解释,您可以使用:

split(df, cut(1:nrow(df), unique(c(1, v, nrow(df))), include.lowest=TRUE))