【问题标题】:Split a R dataframe by rows containing a keyword按包含关键字的行拆分 R 数据帧
【发布时间】:2012-11-06 10:46:15
【问题描述】:

有没有一种快速的方法来按关键字拆分大型 data.frame

例如,如果我有下面的数据集,是否有一种快速方法可以在每次出现 source:restaurant 行时拆分数据框?对这个问题的另一个看法是,是否有一种基于截止列表(在本例中为c(3,7,10))为数据框创建因子的快速方法,然后会给我例如factors=c(A,A,A,B,B,B,B,C,C,C) 我可以在split(mylist,factors) 公式中使用吗?谢谢

mylist=structure(list(V1 = structure(c(5L, 3L, 7L, 8L, 6L, 4L, 7L, 2L, 
1L, 7L), .Label = c("cider", "claret", "custard", "krispies", 
"rhubarb", "shreddies", "source:restaurant", "weetabix"), class = "factor"), 
    V2 = c(1L, 5L, NA, 9L, 13L, 17L, NA, 21L, 25L, NA), V3 = c(2L, 
    6L, NA, 10L, 14L, 18L, NA, 22L, 26L, NA), V4 = c(3L, 7L, 
    NA, 11L, 15L, 19L, NA, 23L, 27L, NA), V5 = c(4L, 8L, NA, 
    12L, 16L, 20L, NA, 24L, 28L, NA)), .Names = c("V1", "V2", 
"V3", "V4", "V5"), class = "data.frame", row.names = c(NA, -10L
))

下面是一个非常笨拙的可能解决方案,但我希望有一些更优雅的东西..

temp=NULL
a=which(mylist[,1] == 'source:restaurant')
for(i in seq_along(a)){temp=c(temp,rep(letters[i],(a[i]-length(temp))))}
temp=as.factor(temp)
split(mylist,temp)

【问题讨论】:

  • 请给出一个可重现的例子,尤其是dput(mylist)dput(head(mylist,10)的输出。您的数据的结构将决定如何回答这个问题,因此包含准确的描述和示例至关重要。
  • 嗨 @mnel 已编辑为上面可用的 mylist

标签: r


【解决方案1】:

因素:

factor(cumsum(mylist$V1 == "source:restaurant") + 1)

分裂:

split(mylist, cumsum(mylist$V1 == "source:restaurant"))

更新:您可能在它标记的每个组的末尾都有restaurant:soure,为此您可以使用:

factor(cumsum(c(0, head(mylist$V1 == "source:restaurant", -1))) + 1)
split(mylist, cumsum(c(0, head(mylist$V1 == "source:restaurant", -1))))

会更好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多