我想知道如何将包含数字和字符串变量的列表转换为数据帧:
例如:
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
谢谢!
答案 0 :(得分:3)
对于列表中的大数据,建议“就地”更改数据。
供参考,请参阅Simon Urbanek的回答:Quickly reading very large tables as dataframes in 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
有两个主要优点:一是避免复制对象x
。另一个是它使列类与列表类保持一致(参见下文)。使用as.data.frame
时,字符类将转换为因子。
sapply(x, class)
# aa bb cc
# "character" "character" "numeric"
答案 1 :(得分:1)
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>
答案 2 :(得分:0)
你可以x<-as.data.frame(x)
。
如果您想避免将字符转换为因素,请根据@ Frank的优惠进行更新
x<-as.data.frame(x, StringsAsFactors = FALSE)
。
答案 3 :(得分:0)
> 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
>