【问题标题】:Split a data frame into multiple parts based on indices in R根据 R 中的索引将数据帧拆分为多个部分
【发布时间】:2018-08-03 13:44:01
【问题描述】:

我有这个数据框:

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

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

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

可用作分割数据帧的函数的输入。我一直在查看 base R 的 split 函数,但不知道如何输入我的索引。如果有比使用 split 更好的功能,我很乐意尝试。

【问题讨论】:

  • 你能显示你的预期输出吗
  • 嗨@Hardikgupta - 我的预期输出显示为“e”,虽然这只是一个例子,但我想要多个数据框。
  • 请上传你的准确输出,全部
  • 完成@Hardikgupta

标签: r


【解决方案1】:

由于您的数据是重复的,我们可以先调用unique,然后根据idx 执行spliting。

(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 的评论。

【讨论】:

    猜你喜欢
    • 2018-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-18
    • 2018-05-05
    • 2013-11-16
    相关资源
    最近更新 更多