Я играю с R-кадрами данных и пытаюсь выяснить, как они работают. В примере ниже я пытаюсь использовать фрейм данных с 1 строкой для удаления элементов вектора. Я знаю, что есть намного лучшие способы сделать это, например unique(), или использовать хэш-библиотеку и т. Д. И т. Д. Это больше о том, как работает DataFrame.Динамические столбцы в R-кадрах данных
Это первая часть работает просто отлично, если добавляется имя столбца строка:
> v = c(1, 2, 3, 10, 100, 50, 50, 100, 1, 2, 3, 10)
> d = data.frame(row.names=c('the row'))
> d
data frame with 0 columns and 1 rows
> for (x in v) { d[1,as.character(x)] = x}
> d
1 2 3 10 100 50
the row 1 2 3 10 100 50
Однако, если я пытаюсь использовать номер в качестве имени столбца, я получаю очень странное поведение:
> e = data.frame(row.names=c('the row'))
> for (x in v) { e[1,x] = x}
Error in `[<-.data.frame`(`*tmp*`, 1, x, value = 10) :
new columns would leave holes after existing columns
> e
V1 V2 V3
the row 1 2 3
Прежде всего, откуда взялись «V1», «V2» и «V3»? Во-вторых, почему это не работает? Я имею в виду, я могу разобраться в том, что это не радует, что 10 не является следующим числом после 3, но кроме этого я не знаю, почему это не работает.
Являются ли столбцы индексируемыми только как строки? Другие ограничения, о которых стоит знать?
Заранее благодарен!
Просто примечание: в вашем первом примере 'd [," 10 "]' и 'd [, 4]' относятся к тому же столбцу. –
'? Data.frame' имеет ссылку на'? Make.names', что, вероятно, поможет. – Gregor
Вы ответили на свой вопрос: '[<-. Data.frame' не будет расширять кадр данных более чем на один столбец за раз. Поскольку 'e [, 10]' относится к 10-му столбцу, и у вас только 3, не нужно идти. – joran