as_tibble возвращает только одну переменную - PullRequest
1 голос
/ 13 мая 2019

Я очень плохо знаком с R и кодированием, и это мой первый опыт работы с SO

У меня есть фрейм данных (brfss2013) с 491775 obs и 330 переменными.Я хочу взять три из этих переменных ($ qlmentl2, $ misdeprd & $ misnowork) и создать новый фрейм данных под названием "level_unhappy" только с этими тремя переменными

Я пробовал этот код в R Studio, иВ результате получается фрейм данных с 491775 obs (правильно) и 1 переменной.

```{r create_level_unhappy, results='hide'}
level_unhappy <-  as_tibble(brfss2013$qlmentl2, brfss2013$misdeprd, brfss2013$misnowork, validate = FALSE)

```

Я тоже пробовал это ...

level_unhappy <- as.data.frame(brfss2013$qlmentl2, brfss2013$misdeprd, brfss2013$misnowork) 

... и получил ...

Error in !optional : invalid argument type
In addition: Warning message:
In as.data.frame.integer(brfss2013$qlmentl2, brfss2013$misdeprd,  :
  'row.names' is not a character vector of length 491775 -- omitting it. Will be an error!

Чего мне не хватает?

Приветствия, -eric

Ответы [ 2 ]

2 голосов
/ 13 мая 2019

Первые аргументы as.data.frame должны быть списком объектов, которые вы хотите объединить во фрейм данных, потому что второй аргумент ищет row.names.Таким образом, чтобы не вводить R в заблуждение, что ваш второй фрейм данных - row.names, а поскольку вы хотите объединить векторов , поместите их все в cbind()

level_unhappy <- as.data.frame(cbind(brfss2013$qlmentl2, brfss2013$misdeprd, brfss2013$misnowork))

.Можно также избежать этой головной боли, используя другую базовую команду R data.frame вместо as.data.frame, что обеспечивает некоторые косвенные преимущества в зависимости от того, что вы пытаетесь сделать.Однако в этом случае ваш код работал бы так, как написано с помощью data.frame:

level_unhappy <- data.frame(brfss2013$qlmentl2, brfss2013$misdeprd, brfss2013$misnowork)

data.frame, не предполагающим, что какой-либо аргумент является чем-то иным, кроме данных, которые должны быть объединены, если вы не расшифруете столько, сколько используетенеобязательный аргумент, например, row.names = "r1".

1 голос
/ 13 мая 2019

as_tibble будет делать разные вещи в зависимости от того, что вы передаете в качестве первого аргумента.Делая as_tibble(brfss2013$qlmentl2, ...), вы передаете вектор в качестве первого аргумента.Метод as_tibble для векторов не настроен на прием нескольких векторов, а другие векторы, которые вы передаете, в конечном итоге используются как имена строк и т. Д. Вместо этого, я думаю, вы хотите:

as_tibble(bfrss2013[, c("qlmentl2","misdeprd","misnowork")]) 

Таким образом,вы передаете фрейм данных в качестве первого аргумента.as_tibble преобразует кадр данных в tibble.

Это действительно действительно, только если вы специально хотите конвертировать ваши данные в tibble.Tibbles в основном работают как датафреймы с парой добавленных функций.Если все, что вы хотите сделать, это выделить эти столбцы в отдельную переменную, вы можете сделать:

new_df <- bfrss2013[, c("qlmentl2","misdeprd","misnowork")]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...