对于所有可能的双向表,是否可以推广for循环?

m3eecexj  于 2023-04-27  发布在  其他
关注(0)|答案(1)|浏览(83)

我确信答案就在眼前,所以请耐心听我说,但是我如何构建一个for循环来遍历一个 Dataframe ,为所有可能的迭代创建双向列联表?
示例 Dataframe :

amazon <- c(0,1,0,1,1)
age <- c(1,2,4,3,0)
income <- c(1,1,1,0,0)
delivery <- c(1,2,0,3,4)
manhattan <- c("Manhattan", "Other", "Manhattan", "Other", "Manhattan")

df <- data.frame(cbind(amazon, age, income, delivery, manhattan))
df <- df %>% mutate(across(everything(), as.factor))

因此,所有列都是分类为因子的分类/二元变量
我试过了

results <- data.frame()

for(i in 1:(ncol(df))){
  for(j in (i+1):ncol(df)){
    table <- table(df[,i], df[,j], useNA = "ifany")
    results <- rbind(results,ftable(round(prop.table(table),3)))
  }
}

我也试过这个:

make_p_tab <- function(x) {
  col_df <- df %>% dplyr::select(var1, all_of(x)) %>% filter(!is.na(x)) %>%
  table() %>% prop.table(.,1)
}

to_do <- function(df){
  colnames(df)
}

food_xtab <- map(to_do, make_p_tab)

我希望有多个列联表,这样输出的结果就像是我一个接一个地写出了每个列联表一样。

table(df$amazon, df$age)
table(df$amazon, df$income)
table(df$amazon, df$manhattan)...
table(df$delivery, df$manhattan)

谢谢!

guicsvcw

guicsvcw1#

直接使用combn

combn(df, 2, table, simplify = FALSE)

[[1]]
      age
amazon 0 1 2 3 4
     0 0 1 0 0 1
     1 1 0 1 1 0

[[2]]
      income
amazon 0 1
     0 0 2
     1 2 1

[[3]]
      delivery
amazon 0 1 2 3 4
     0 1 1 0 0 0
     1 0 0 1 1 1

[[4]]
      manhattan
amazon Manhattan Other
     0         2     0
     1         1     2

  :
  :
  :

相关问题