繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM