Как создать data.frame с неизвестным количеством столбцов? - PullRequest
1 голос
/ 01 апреля 2010

Я хотел бы создать в функции цикл для создания 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 ]

6 голосов
/ 01 апреля 2010

Есть много способов сделать это. Ваша первая проблема заключается в том, что ваш объект "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 для имен строк, то вы должны следовать примеру Джеймса:

x2 <- data.frame(rbind(c(1,2,3), c(4,5,6)))
rownames(x2) <- c("a","b")
3 голосов
/ 01 апреля 2010

У вас есть 2 списка в b, которые хранятся как отдельные переменные?

Если это так, вы можете использовать:

x<-data.frame(rbind(b1,b2))
rownames(x)<-a
2 голосов
/ 01 апреля 2010

Другой способ

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

library(plyr)
df <- ldply(b)
rownames(df) <- a
0 голосов
/ 01 апреля 2010

Спасибо большое! Прежде чем прочитать ваш ответ, я попробовал другой метод, используя:

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))

Но это сложнее!

Olivier

PS: «a» может быть именем строки или столбца, целью является экспорт data.frame в виде файла CSV.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...