[英]Convert list with numeric and string variables to dataframe in R
我想知道如何将具有数字和字符串变量的列表转换为数据框:
例如:
aa<-c("a","b","b","b","d")
bb<-c("Yes","No","No","Yes","Yes")
cc<-c(1,2,4,4,3)
x<-list(aa=aa,bb=bb,cc=cc)
如何将x转换为数据框,这样当我调用x时会得到:
aa bb cc
1 a Yes 1
2 b No 2
3 b No 4
4 b Yes 4
5 d Yes 3
谢谢!
对于列表中的大数据,建议“就地”更改数据。
作为参考,请参见此处的Simon Urbanek的答案: 快速读取非常大的表作为R中的数据帧
attr(x, "row.names") <- .set_row_names(unique(lengths(x)))
class(x) <- "data.frame"
x
# aa bb cc
# 1 a Yes 1
# 2 b No 2
# 3 b No 4
# 4 b Yes 4
# 5 d Yes 3
与as.data.frame
相比,这有两个主要优点as.data.frame
其一是避免复制对象x
。 另一个是使列类与列表类保持一致(请参阅以下内容)。 使用as.data.frame
,字符类将转换为因子。
sapply(x, class)
# aa bb cc
# "character" "character" "numeric"
data.table
也将具有一class
data.frame
,因此您可以使用高效的setDT
函数:
x <- list(aa = aa, bb = bb, cc = cc)
library(data.table)
setDT(x)
is.data.frame(x)
# [1] TRUE
str(x)
# Classes ‘data.table’ and 'data.frame': 5 obs. of 3 variables:
# $ aa: chr "a" "b" "b" "b" ...
# $ bb: chr "Yes" "No" "No" "Yes" ...
# $ cc: num 1 2 4 4 3
# - attr(*, ".internal.selfref")=<externalptr>
您可以执行x<-as.data.frame(x)
。
如果您要避免将字符转换为因数,则根据以下@Frank的优点进行更新
x<-as.data.frame(x, StringsAsFactors = FALSE)
> x = data.frame(aa,bb,cc)
> x
aa bb cc
1 a Yes 1
2 b No 2
3 b No 4
4 b Yes 4
5 d Yes 3
>
> str(x)
'data.frame': 5 obs. of 3 variables:
$ aa: Factor w/ 3 levels "a","b","d": 1 2 2 2 3
$ bb: Factor w/ 2 levels "No","Yes": 2 1 1 2 2
$ cc: num 1 2 4 4 3
>
要么:
> x = data.frame(aa,bb,cc, stringsAsFactors=F)
> x
aa bb cc
1 a Yes 1
2 b No 2
3 b No 4
4 b Yes 4
5 d Yes 3
> str(x)
'data.frame': 5 obs. of 3 variables:
$ aa: chr "a" "b" "b" "b" ...
$ bb: chr "Yes" "No" "No" "Yes" ...
$ cc: num 1 2 4 4 3
>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.