首页 > 解决方案 > 从 4 列创建一个卡方表,并将 2 个值配对在一起,以使一个依赖和另一个独立

问题描述

我在下面有一个列列表。

col 1|col 2|col 3|col 4|col 5|Yes Col_B|No Col_B|Yes Col_W|No Col_W
 1      1      3     3     5          7        9        3         2

我想做的是取最后四列并取 Yes Col_B、No Col_B、Yes Col_W 和 No Col_W,然后将它们想象成两列

Yes or No| B or W
       7       B
       9       B
       3       W
       2       W

现在我有两个临时列,我可以运行一个卡方来指示是或否是否取决于 B 或 W

 test <- chisq.test(table(data$YesorNo, data$BorW)) 

标签: rpivotchi-squaredtemp

解决方案


首先我们使用pivot_longerfrom tidyr,并将其设置为为每一列创建一个组(行):

newdf = tidyr::pivot_longer(df[,6:9], cols=everything())

这使:

  name      value
1 Yes Col_B     7
2 No Col_B      9
3 Yes Col_W     3
4 No Col_W      2

现在我们需要将name列分成两列,一列表示是或否,一列表示 B 或 W。我们通过在这些名称(正则表达式)中找到模式来做到这一点:

模式是(是或否)(Col_)(B 或 W),我们将其写为"(Yes|No) Col_(B|W)"。然后我们运行一个循环为"\\1"第一个组创建一个列 - 其中组由括号设置 - ("\\2"paste0("\\",i)

newdf = cbind(NA, NA, newdf) #Creating 2 empty columns

for(i in c(1,2)){
  newdf[,i] = gsub("(Yes|No) Col_(B|W)",
                   paste0("\\",i),
                   newdf$name)}

newdf$name = NULL #Getting rid of the name column
colnames(newdf) = c("Yes or No", "B or W", "Value")

输出:

  Yes or No B or W Value
1       Yes      B     7
2        No      B     9
3       Yes      W     3
4        No      W     2

推荐阅读