Я хочу создать пустой фрейм данных df (0 строк),
с двумя названиями столбцов: "A" и "B" .
Это простой пример. Могут быть сотни имен столбцов ... (строки будут добавлены позже с числовыми значениями от 0 до 1 - например: 0,80 0,20).

Сначала покажу, что у меня есть (работает нормально),
а потом то, что мне нужно (но не знаю, как это сделать!).

Это то, что у меня ЕСТЬ, и все работает нормально:

df <- data.frame ("A" = numeric (), "B" = numeric (), stringsAsFactors = FALSE)

df
[1] АБ
& lt; 0 строк & gt; (или имена строк 0 длины)

Но, Мне НЕОБХОДИМО определить имена столбцов:
«А» и «Б»
вне и перед вызовом:
df & lt; - data.frame (...).

Как это:

имена столбцов & lt; - c ("A" "B")
df & lt; - data.frame ( имена столбцов , stringsAsFactors = FALSE)

Д.Ф.

Имена столбцов
1 А
2 млрд

Неправильный df! ... мне нужно:
(смоделирован необходимый пустой df, как и в первом примере выше)

df
[1] АБ
& lt; 0 строк & gt; (или имена строк 0 длины)

Как указать имена столбцов в colnames
перед созданием пустого фрейма данных df?
Благодаря!

0
user39150 29 Фев 2016 в 21:11

2 ответа

Лучший ответ

Это просто обходной путь, но он должен сработать для вас:

colnames <- c("A","B")

l <- list()
l[[ colnames[1] ]] <- NA
l[[ colnames[2] ]] <- NA

df <- as.data.frame(l)
df <- df[ -1, ]

> str(df)
[1] A B
<0 rows> (or row.names with length 0)

Более короткая версия выглядит следующим образом:

colnames <- c("A","B")

d <- c(NA,NA)
names(d) <- colnames
df <- data.frame(rbind(d))[-1,]

Радоваться, веселиться!

1
Seily 29 Фев 2016 в 20:18

Поскольку OP попросил короткий способ сделать это, вот однострочный (после того, как имена столбцов были ранее определены), который возвращает фрейм данных с нулевыми строками и желаемыми именами столбцов.

colnames <- c('A', 'B')
df <- setNames(as.data.frame(matrix(nrow = 0, ncol = 2)), nm = colnames)
0
qdread 10 Янв 2018 в 18:08