7

我有一个这样的列表:

arg0 <- list(code = "a", n = rep(10, 3))

列表中的对象数量是可变的。列表的对象是向量——只有一维对象。

我想制作一个程序将列表转换为单行 data.frame,如下所示:

> data.frame(code = "a", n.1 = 10, n.2 = 10, n.3 = 10)
  code n.1 n.2 n.3
1    a  10  10  10

我目前有这个解决方案:

a <- stack(arg0)
b <- data.frame(t(a[,1]))
names(b) <- a[,2]
b <- data.frame(b)

b我想要达到的结果几乎在哪里:

> b
  code  n n.1 n.2
1    a 10  10  10

两个问题:

  1. 有没有更优雅的方法来实现结果?
  2. 你知道如何获得重复的 colnames 的编号c(n.1, n.2, n.3)吗?
4

3 回答 3

11

这是一种方式:

data.frame(t(unlist(arg0)))
#   code n1 n2 n3
# 1    a 10 10 10
于 2012-11-26T15:27:38.593 回答
6

如果要保留列表对象的不同数据类型,可以使用以下命令:

data.frame(lapply(arg0, function(x) t(data.frame(x))))

输出:

  code n.1 n.2 n.3
x    a  10  10  10

第二到第四列中的值仍然是数字。

于 2012-11-26T15:43:45.603 回答
3

您可以在转置的未列出数据上使用write.table和的组合。read.table我已将剪贴板用作固定表格的中间步骤。

write.table(t(unlist(arg0)),"clipboard")
read.table("clipboard")
  code n1 n2 n3
1    a 10 10 10
于 2012-11-26T15:27:12.883 回答