R as.data.frame.matrix将第一列变成行名

时间:2018-11-07 15:11:47

标签: r

我想将表格变成数据框。这里应该有三列:1.邮政编码2结果“ 0”和3结果“ 1”。但是as.data.frame.matrix会将邮政编码转换为行名,并使它们无法使用。

我试图添加一个第四列,其假想ID为(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)

有人有个好主意吗?预先感谢!

编辑:

何时:

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

我得到的东西接近我想要的东西,但结果在同一栏中。如何解开它们,使它们再次看起来像桌子?

2 个答案:

答案 0 :(得分:0)

您仅向具有101行的data.frame提供100个值。

> nrow(abs)
[1] 101

这样就可以了

abs$new_col <- 1:101

我想你想要这个:

abs2 <- as.data.frame(abs) %>% select(2,3,1)

答案 1 :(得分:0)

使用dplyrtidyr可以更轻松地获得所需的结果:

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)