1

如何将全局环境中的多个变量保存到 R 中的数据框中?我可以使用 $ 来一一完成。但是是否有一个命令可以一次移动所有变量?

谢谢。

4

2 回答 2

3

你可以做:

do.call(data.frame, lapply(ls(), get))

但我只想说这听起来是个可怕的想法。

于 2013-08-19T20:18:42.693 回答
0

如果有一个命名的对象列表,那么:

 cbind(dfrm, list.obj)

例如

dados <- data.frame(x=1:10, v1=rnorm(10), v2=rnorm(10))
dat1 <- rnorm(10)
dat2 <- letters[1:5]
cbind(dados, list(new1=dat1, new2=dat2))

也可以使用这种形式:

cbind(dados, new1=dat1, new2=dat2)

如果您在全局环境中有一堆变量,其名称中包含字符串“zzz”,并且您希望将它们按列附加到现有数据框,您可以使用以下命令:

dados[, ls(patt="zzz") ] <- sapply( ls(patt="zzz"), get)

您可能会注意到我反对使用data.frame(cbind(...)),但我说要使用cbind. 好吧,我假设我的案例中的第一个参数已经是一个数据框,因此cbind不会被调用,而是cbind.data.frame' gets called, and it will allow the usual list-behavior of data.frame objects to persist. If the first argument is only a vector, then.Internal(cbind(...)` 将对矩阵进行强制转换,该矩阵将删除所有参数的属性然后强制进入通用存储模式。

于 2013-08-19T20:47:34.760 回答