【发布时间】:2016-10-06 19:22:21
【问题描述】:
给定一个列表b01,列表:tp01、tp02、tp03,其中每个tp 存储特定类型的数据,我如何提取每个tp 的类?
目标是返回保留原始变量类型(例如 int、char)的单个数据帧。我正在考虑提取每个tp 的类并存储它们,然后用这些存储的类覆盖数据框的类。
在下面的示例中,生成的数据框有 3 个变量,它们被视为 Factor。我希望他们被视为int、char、int。
我尝试了以下没有运气:
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 ...
【问题讨论】:
-
@RichScriven 也只是
data.frame(unlist(b01,recursive=FALSE))。 -
@nicola - 是的,就是这个;)
-
还需要添加
stringsAsFactors=FALSE来获取字符而不是因子。 -
如果您命名原始列表的元素,那么这些元素将作为数据框的列名返回(例如,
b01 <- list(tp01=tp01, tp02=tp02, tp03=tp03)或b01 <- Hmisc::llist(tp01, tp02, tp03))。 -
谢谢大家。有没有办法将变量名保留为
tp01、tp02、tp03?