1

大きな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)
4

1 に答える 1

3

要因:

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))))

のほうがいい。

于 2012-11-06T11:18:22.113 に答える