我知道这可能很简单,但是我进行了搜索,但找不到明确的答案,作为r的非经验用户,我自己也无法开发它。 我只需要在特定顺序或值的某些已定义点将列表或数据框中的一列划分为几个子列(不一定具有相等的长度)。我正在处理大数据,因此必须有一个快速功能,可以根据选择的点直接划分列。
为了清楚起见,我需要做类似的事情:
# data frame
df<- data.frame(cbind("l1"=c(1:20),"l2"=c(21:40)))
# sepration points
pts<- c(4, 11, 17)
# dividing into sub columns
gp1<-df$l1[1:pts[1]]
gp2<-df$l1[pts[1]:pts[2]]
gp3<-df$l1[pts[2]:pts[3]]
gp4<-df$l1[pts[3]:20]
# combining
res<- list(gp1, gp2, gp3, gp4)
> res
[[1]]
[1] 1 2 3 4
[[2]]
[1] 4 5 6 7 8 9 10 11
[[3]]
[1] 11 12 13 14 15 16 17
[[4]]
[1] 17 18 19 20
但无需一一定义分隔点,也无需对数据进行基于值的重新排序。
在此先感谢您的帮助!
答案 0 :(得分:0)
我们可以使用Map
创建序列。将{pts之前的1
和pts末尾的nrow
连接为两个单独的vector
,使用它来创建Map
的索引序列并获取基于序列的“ df”的“ l1”列的相应值
Map(function(i, j) df$l1[i:j], c(1, pts), c(pts, nrow(df)))
#[[1]]
#[1] 1 2 3 4
#[[2]]
#[1] 4 5 6 7 8 9 10 11
#[[3]]
#[1] 11 12 13 14 15 16 17
#[[4]]
#[1] 17 18 19 20