这可能很简单,但我找不到解决方案:
df <- data.frame(replicate(10,sample(0:1,10,rep=TRUE)))
v <- c(3, 7)
Run Code Online (Sandbox Code Playgroud)
有没有一种优雅的方法将这个数据帧拆分为v中指定的行号的三个元素(列表中)?
akr*_*run 12
假设行在1&2第一次拆分3,4,5,6中7 to nrow(df)进入,在第二次拆分中进入最后一次
split(df, cumsum(1:nrow(df) %in% v))
Run Code Online (Sandbox Code Playgroud)
但如果1:3行在第一次拆分中,那么就会出现4:7,而在第三次拆分中8 to nrow(df)
split(df, cumsum(c(TRUE,(1:nrow(df) %in% v)[-nrow(df)])) )
Run Code Online (Sandbox Code Playgroud)
或者@James在评论中提到的,
split(df, cumsum(1:nrow(df) %in% (v+1)))
Run Code Online (Sandbox Code Playgroud)
其他方式:
split(df, findInterval(1:nrow(df), v))
Run Code Online (Sandbox Code Playgroud)
对于替代解释,您可以使用:
split(df, cut(1:nrow(df), unique(c(1, v, nrow(df))), include.lowest=TRUE))
Run Code Online (Sandbox Code Playgroud)