将嵌套列表转换为数据框,同时保留列类型

时间:2016-10-06 19:22:22

标签: r list nested

给定列表b01列表:tp01tp02tp03,其中每个tp存储特定类型的数据,如何做我提取每个tp的类?

目标是返回保留原始变量类型的单个数据框(例如int,char)。我正在考虑提取每个tp的类并存储它们,然后用这些存储的类覆盖数据框的类。

在下面的示例中,结果数据框有3个被视为Factor的变量。我希望将它们视为intcharint

我没有运气就尝试了以下内容:

str(as.data.frame(lapply(b01,unlist)))
str(sapply(as.data.frame(lapply(b01,unlist)),class))
lapply(b01,unlist)
sapply(str(lapply(b01,unlist)),unlist)

MWE:

set.seed(1)
tp01 <- list(sample(seq(0,100),10))
set.seed(2)
tp02 <- list(sample(seq(0,100),10))
tp03 <- list(letters[c(sample(seq(0,26),10))])
b01 <- list(tp01, tp02, tp03)

df <- as.data.frame(matrix(unlist(lapply(all,unlist)),
    nrow=length(unlist(b01[1]))*length(all)))
> df
   V1 V2 V3
1  26  q 18
2  37  j 70
3  56  t 56
4  89  c 16
5  19  g 91
6  86  y 90
7  97  w 12
8  62  v 78
9  58  r 43
10  5  b 50
11 18 26  q
12 70 37  j
13 56 56  t
14 16 89  c
15 91 19  g
16 90 86  y
17 12 97  w
18 78 62  v
19 43 58  r
20 50  5  b

str(df)
'data.frame':   20 obs. of  3 variables:
 $ V1: Factor w/ 19 levels "12","16","18",..: 5 6 10 16 4 15 19 12 11 8 ...
 $ V2: Factor w/ 20 levels "19","26","37",..: 15 14 17 12 13 20 19 18 16 11 ...
 $ V3: Factor w/ 20 levels "12","16","18",..: 3 7 6 2 10 9 1 8 4 5 ...

1 个答案:

答案 0 :(得分:0)

您可以使用lapply和as.data.frame执行此操作:

names(b01) <- c("tp01","tp02","tp03")  #optional
first.step <- lapply(b01, unlist) 
second.step <- as.data.frame(first.step, stringsAsFactors = F) 

有关强制执行该步骤的信息,请参阅unlist()文档。 stringsAsFactors = F参数将在第二步中保留字符向量。