1

我想在一个函数中创建一个循环来创建一个具有可变列数的 data.frame。

有类似的东西:

a = c("a","b")
b = c(list(1,2,3), list(4,5,6))
data.frame(a,b)

我想得到一个像这样的数据框:

a 1 2 3
b 4 5 6

而不是我获得:

a  1  2  3  4  5  6
b  1  2  3  4  5  6

谢谢!

PS:我也尝试过使用 rbind,但它不起作用......

4

4 回答 4

6

有很多方法可以做这种事情。您的第一个问题是您的“b”对象不是矩阵。您需要将其定义为具有行和列(或使用 rbind)。

您可以创建数据框,然后将它们组合起来(这比一开始就使用矩阵要好,因为它会将每个对象类型保持为数字或字符等,而矩阵会丢失它):

x1 <- data.frame(X=c("a","b"))
x2 <- data.frame(rbind(c(1,2,3), c(4,5,6)))
data.frame(x1, x2)
  X X1 X2 X3
1  a  1  2  3
2  b  4  5  6

如果 x1 用于行名,那么您应该遵循 James 的示例:

x2 <- data.frame(rbind(c(1,2,3), c(4,5,6)))
rownames(x2) <- c("a","b")
于 2010-04-01T13:23:11.420 回答
3

您是否将 b 中的 2 个列表作为单独的变量保存?

如果是这样,您可以使用:

x<-data.frame(rbind(b1,b2))
rownames(x)<-a
于 2010-04-01T13:05:40.303 回答
2

另一种方式

a = c("a","b")
b = list(c(1,2,3), c(4,5,6))

library(plyr)
df <- ldply(b)
rownames(df) <- a
于 2010-04-01T13:34:09.927 回答
0

十分感谢 !在阅读您的回复之前,我尝试了另一种方法:

for (x in niveaux) {
    assign(x,pi)
    assign(paste(x,"moy"),"moy")
    }
# Que j'utilise ensuite avec qq chose du genre :
assign(x,append(get(x),1))

但它更复杂!

奥利维尔

PS : 'a' 可以是行名或列,目的是将 data.frame 导出为 CSV 文件。

于 2010-04-01T18:18:15.823 回答