我想将表格变成数据框。这里应该有三列: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))
我得到的东西接近我想要的东西,但结果在同一栏中。如何解开它们,使它们再次看起来像桌子?
答案 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)
使用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)