将带有数字和字符串变量的列表转换为R中的数据帧

时间:2014-08-24 14:42:18

标签: r list

我想知道如何将包含数字和字符串变量的列表转换为数据帧:

例如:

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

谢谢!

4 个答案:

答案 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
>