我有这个数据框:
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更好的功能,我很乐意尝试。
答案 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的评论。