根据R中的索引将数据帧分为多个部分

时间:2018-08-03 13:44:02

标签: r

我有这个数据框:

a <- rep(c("Like", "James", "2 weeks ago", "Jenni", "a month ago", "Max", "Max", "2 reviews · 2 photos", "3 months ago"), 
each=3)
b <- data.frame(a)
b

我想根据一行是否包含“ * ago”将其拆分为单独的数据帧,因此我最终得到了几个数据帧,其中“ * ago”是每行的最后一行,例如:

d <- c("Like", "James", "2 weeks ago")
e <- data.frame(d)
f <- c("Jenni", "a month ago")
g <- data.frame(f)
h <- c("Max", "Max", "2 reviews · 2 photos", "3 months ago")
i <- data.frame(h)

预期输出:

    d
Like
James
2 weeks ago


   f
Jenni
a month ago


    h
Max
Max
2 reviews · 2 photos
3 months ago

我创建了一个整数矢量,其中包含“ *之前”的行的索引:

c <- grep(" ago", b$a)
c

可以用作拆分数据帧的函数的输入。我一直在看从基数R的split函数,但无法弄清楚如何输入索引。如果有比使用split更好的功能,我很乐意尝试。

1 个答案:

答案 0 :(得分:2)

由于您的数据是重复的,我们可以首先调用unique,然后基于split进行idx

(idx <- cumsum(grepl(" ago$", unique(b)$a)) - grepl(" ago$", unique(b)$a))
#[1] 0 0 0 1 1 2 2 2


split(unique(b), idx)
#$`0`
#            a
#1        Like
#4       James
#7 2 weeks ago
#
#$`1`
#             a
#10       Jenni
#13 a month ago
#
#$`2`
#                      a
#16                  Max
#22 2 reviews · 2 photos
#25         3 months ago

关于如何创建idx的想法来自@joran对this answer的评论。