2014-02-27 14 views
0

您好親愛的社區,提取元素,並轉化爲多dataframes

this post

我正在尋找如何從一個包含有不同的多個子列表一個列表中創建多個數據幀名

所以,從一個叫tier.col名單,我想創建一個函數tier2col返回到多個data.frames(儘可能有子列表我的列表)包含subl的具體內容IST。

我得到如何手工做,因爲這樣:在多個名稱

phones <- data.frame(tier.col$phones$xmin[-1,3], tier.col$phones$xmax[-1,3], tier.col$phones$text[3]) 

但在現實中「手機」的變化,所以我需要一個更通用的方法,以子列表:

x <- data.frame(tier.col$x$xmin[-1,3], tier.col$x$xmax[-1,3], tier.col$x$text[3]) 

該功能將作爲如此:

tier2col <- function(list.x) { 
    for all sublist in my list 
    select tier.col$sublist$xmin[-1,3], tier.col$sublist$xmax[-1,3], tier.col$sublist$text[3] 
    and compile them in a dataframe 
} 

我知道我可以調用所有的XMIN & XMAX &文本通過這樣的: lapply(tier.col[c(1:length(names(tier.col)))], "[", 1) lapply(tier.col[c(1:length(names(tier.col)))], "[", 2) lapply(tier.col[c(1:length(names(tier.col)))], "[", 3)

但我不知道怎麼去通過這個或如何對這種數據結構的mapply使用。

我想像tier.col$c(names(tier.col)$xmin這樣的工作,但顯然,這不是正確的方式來做到這一點。

有人可以幫助我以有效的方式計算這個嗎?

Stucture的tier.col

List of 17 
$ phones  :List of 3 
    ..$ xmin:'data.frame': 2506 obs. of 3 variables: 
    .. ..$ num.row: num [1:2506] 11 15 19 23 27 31 35 39 43 47 ... 
    .. ..$ object : chr [1:2506] "xmin" "xmin" "xmin" "xmin" ... 
    .. ..$ value : Factor w/ 4466 levels ""," "," n ",..: 20 20 21 22 23 24 26 27 28 29 ... 
    ..$ xmax:'data.frame': 2506 obs. of 3 variables: 
    .. ..$ num.row: num [1:2506] 12 16 20 24 28 32 36 40 44 48 ... 
    .. ..$ object : chr [1:2506] "xmax" "xmax" "xmax" "xmax" ... 
    .. ..$ value : Factor w/ 4466 levels ""," "," n ",..: 2414 21 22 23 24 26 27 28 29 30 ... 
    ..$ text:'data.frame': 2505 obs. of 3 variables: 
    .. ..$ num.row: num [1:2505] 17 21 25 29 33 37 41 45 49 53 ... 
    .. ..$ object : chr [1:2505] "text" "text" "text" "text" ... 
    .. ..$ value : Factor w/ 4466 levels ""," "," n ",..: 11 4397 4434 3697 4025 3697 3832 4127 3992 4397 ... 
$ syll   :List of 3 
    ..$ xmin:'data.frame': 1147 obs. of 3 variables: 
    .. ..$ num.row: num [1:1147] 10037 10041 10045 10049 10053 ... 
    .. ..$ object : chr [1:1147] "xmin" "xmin" "xmin" "xmin" ... 
    .. ..$ value : Factor w/ 4466 levels ""," "," n ",..: 20 20 21 24 27 30 33 35 37 40 ... 
    ..$ xmax:'data.frame': 1147 obs. of 3 variables: 
    .. ..$ num.row: num [1:1147] 10038 10042 10046 10050 10054 ... 
    .. ..$ object : chr [1:1147] "xmax" "xmax" "xmax" "xmax" ... 
    .. ..$ value : Factor w/ 4466 levels ""," "," n ",..: 2414 21 24 27 30 33 35 37 40 43 ... 
    ..$ text:'data.frame': 1146 obs. of 3 variables: 
    .. ..$ num.row: num [1:1146] 10043 10047 10051 10055 10059 ... 
    .. ..$ object : chr [1:1146] "text" "text" "text" "text" ... 
    .. ..$ value : Factor w/ 4466 levels ""," "," n ",..: 11 4431 4028 3879 4430 4442 4405 3783 4159 4327 ... 
$ delivery  :List of 3 
    ..$ xmin:'data.frame': 1147 obs. of 3 variables: 
    .. ..$ num.row: num [1:1147] 14627 14631 14635 14639 14643 ... 
    .. ..$ object : chr [1:1147] "xmin" "xmin" "xmin" "xmin" ... 
    .. ..$ value : Factor w/ 4466 levels ""," "," n ",..: 20 20 21 24 27 30 33 35 37 40 ... 
    ..$ xmax:'data.frame': 1147 obs. of 3 variables: 
    .. ..$ num.row: num [1:1147] 14628 14632 14636 14640 14644 ... 
    .. ..$ object : chr [1:1147] "xmax" "xmax" "xmax" "xmax" ... 
    .. ..$ value : Factor w/ 4466 levels ""," "," n ",..: 2414 21 24 27 30 33 35 37 40 43 ... 
    ..$ text:'data.frame': 1146 obs. of 3 variables: 
    .. ..$ num.row: num [1:1146] 14633 14637 14641 14645 14649 ... 
    .. ..$ object : chr [1:1146] "text" "text" "text" "text" ... 
    .. ..$ value : Factor w/ 4466 levels ""," "," n ",..: 11 2 2 2 2 2 2 2 2 2 ... 
$ link   :List of 3 
    ..$ xmin:'data.frame': 807 obs. of 3 variables: 
    .. ..$ num.row: num [1:807] 19217 19221 19225 19229 19233 ... 
    .. ..$ object : chr [1:807] "xmin" "xmin" "xmin" "xmin" ... 
    .. ..$ value : Factor w/ 4466 levels ""," "," n ",..: 20 20 21 27 30 34 37 40 45 1642 ... 
    ..$ xmax:'data.frame': 807 obs. of 3 variables: 
    .. ..$ num.row: num [1:807] 19218 19222 19226 19230 19234 ... 
    .. ..$ object : chr [1:807] "xmax" "xmax" "xmax" "xmax" ... 
    .. ..$ value : Factor w/ 4466 levels ""," "," n ",..: 2414 21 27 30 34 37 40 45 1642 1651 ... 
    ..$ text:'data.frame': 806 obs. of 3 variables: 
    .. ..$ num.row: num [1:806] 19223 19227 19231 19235 19239 ... 
    .. ..$ object : chr [1:806] "text" "text" "text" "text" ... 
    .. ..$ value : Factor w/ 4466 levels ""," "," n ",..: 11 2 2 4025 2 2 2 4025 2 4025 ... 
$ words   :List of 3 
    ..$ xmin:'data.frame': 807 obs. of 3 variables: 
    .. ..$ num.row: num [1:807] 22447 22451 22455 22459 22463 ... 
    .. ..$ object : chr [1:807] "xmin" "xmin" "xmin" "xmin" ... 
    .. ..$ value : Factor w/ 4466 levels ""," "," n ",..: 20 20 21 27 30 34 37 40 45 1642 ... 
    ..$ xmax:'data.frame': 807 obs. of 3 variables: 
    .. ..$ num.row: num [1:807] 22448 22452 22456 22460 22464 ... 
    .. ..$ object : chr [1:807] "xmax" "xmax" "xmax" "xmax" ... 
    .. ..$ value : Factor w/ 4466 levels ""," "," n ",..: 2414 21 27 30 34 37 40 45 1642 1651 ... 
    ..$ text:'data.frame': 806 obs. of 3 variables: 
    .. ..$ num.row: num [1:806] 22453 22457 22461 22465 22469 ... 
    .. ..$ object : chr [1:806] "text" "text" "text" "text" ... 
    .. ..$ value : Factor w/ 4466 levels ""," "," n ",..: 11 4424 3881 4429 3745 3781 4160 4054 3983 4229 ... 

不要猶豫,告訴我們,如果事情是不明確/缺失,

非常感謝,

回答

5

如果你知道如何處理一個項目( phones),然後將其推廣到一個函數中,以便您可以通過lapply運行它到整個列表中:

process.one <- function(x) 
    data.frame(xmin = x$xmin[-1,3], xmax = x$xmax[-1,3], text = x$text[3]) 

out <- lapply(tier.col, process.one) 

此時,out是一個data.frames列表。建議你保持這種方式,但如果你真正想要的是要添加到環境中的數據幀(例如全球環境),那麼你可以使用list2env來實現:

list2env(out, envir = .GlobalEnv)