R as.data.frame.matrix превращает первый столбец в имена строк - PullRequest
0 голосов
/ 07 ноября 2018

Я хочу превратить таблицу во фрейм данных. Там должны быть три столбца: 1. почтовый индекс 2, результат «0» и 3 результат «1». Но as.data.frame.matrix превращает почтовый индекс в имена строк и делает их непригодными для использования.

Я попытался добавить четвертый столбец с мнимыми идентификаторами (1: 100), чтобы R превращал их в имена строк, но R говорит мне, что «все аргументы должны иметь одинаковую длину» - каковы они!

id <- 1:5000
zip <- sample(100:200, 5000, replace = TRUE)
outcome <- rbinom(5000, 1, 0.23)
df <- data.frame(id, outcome, zip)

abs <- table(df$zip, df$outcome)
abs <- as.data.frame.matrix(abs)

У кого-нибудь есть хорошая и изящная идея? Заранее спасибо!

Edit:

Когда:

abs <- as.matrix(as.data.frame(abs))

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

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Вы можете получить желаемый результат проще с dplyr и tidyr:

library(dplyr)
library(tidyr)

id <- 1:5000
zip <- sample(100:200, 5000, replace = TRUE)
outcome <- rbinom(5000, 1, 0.23)
df <- data.frame(id, outcome, zip)

df <- df %>% group_by(zip, outcome) %>% 
  summarise(freq = n()) %>%
  ungroup() %>% 
  spread(outcome, freq)
0 голосов
/ 07 ноября 2018

Вы предоставляете только 100 значений для data.frame, который имеет 101 строку.

> nrow(abs)
[1] 101

так что это будет работать

abs$new_col <- 1:101

Я думаю, вы хотите это:

abs2 <- as.data.frame(abs) %>% select(2,3,1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...