Невозможно назначить имена при преобразовании матрицы с использованием as.data.frame - PullRequest
1 голос
/ 07 марта 2019

Я хочу создать фрейм данных с двумя столбцами, который имеет данную корреляцию.Два столбца с именами «х» и «у».Есть множество способов сделать это, выборка из многомерного нормального распределения является одним.Таким образом, для 50 строк корреляции r = 0.95 это работает:

myFrame <- as.data.frame(mvrnorm(10, mu = c(0,0), Sigma = matrix(c(1,0.56,0.56,1),, ncol = 2), empirical = TRUE))
myFrame

... но вы заметите, что имена столбцов V1 и V2.Я прочитал то, что я считаю уместным в документах, но не могу изменить имена.

Я пытался использовать col.names = c("x", "y") в разных местах.Кажется, это будет между двумя заключительными круглыми скобками, но я пробовал другие места.Хотя я и не считал это правильным, я также пытался names = c("x, y"), но безрезультатно.

Я понимаю, что мог бы использовать второй шаг для изменения имен, но поскольку as.data.frame() принимает вектор дляназовите столбцы, мне не нужно прибегать к этому.

1 Ответ

1 голос
/ 07 марта 2019

Как отмечено в комментариях, ни data.frame(), ни метод matrix для as.data.frame не имеют аргумента, позволяющего вам задавать имена столбцов.

Стандартным способом, как вы говорите, было бы задание имен объекта во второй строке кода. Если это отвратительно для вас, вы все равно можете сделать это в одной строке. Вот два варианта:

myFrame1 = as.data.frame("colnames<-"(mvrnorm(10, mu = c(0,0), Sigma = matrix(c(1, 0.56, 0.56, 1), ncol = 2), empirical = TRUE), c("x", "y")))

myFrame2 = setNames(as.data.frame(mvrnorm(10, mu = c(0,0), Sigma = matrix(c(1, 0.56, 0.56, 1), ncol = 2), empirical = TRUE)), c("x", "y"))

# I would prefer using two lines, much clearer:
myFrame3 = as.data.frame(mvrnorm(10, mu = c(0,0), Sigma = matrix(c(1, 0.56, 0.56, 1), ncol = 2), empirical = TRUE))
names(myFrame3) = c("x", "y")

# Or, if you're a fine of pipes:
library(magrittr)
myFrame4 = mvrnorm(
    10, 
    mu = c(0,0),
    Sigma = matrix(c(1, 0.56, 0.56, 1), ncol = 2),
     empirical = TRUE
  ) %>%
  as.data.frame %>%
  setNames(c("x", "y"))

При взгляде на ?as.data.frame описываются следующие методы:

## S3 method for class 'character'
as.data.frame(x, ...,
              stringsAsFactors = default.stringsAsFactors())

## S3 method for class 'list'
as.data.frame(x, row.names = NULL, optional = FALSE, ...,
              cut.names = FALSE, col.names = names(x), fix.empty.names = TRUE,
              stringsAsFactors = default.stringsAsFactors())

## S3 method for class 'matrix'
as.data.frame(x, row.names = NULL, optional = FALSE,
              make.names = TRUE, ...,
              stringsAsFactors = default.stringsAsFactors())

Обратите внимание, что метод matrix не имеет аргумент col.names. Только метод list. Таким образом, при преобразовании list в data.frame вы можете использовать col.names, но не конвертировать matrix.

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