r - 从 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))
解决方案
首先我们使用pivot_longer
from 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
推荐阅读
- node.js - 运行 npm test 时出错
- terminal - 路径中的 Mac 终端空间
- npm - 为什么当 curl 可以 200 时 npm 说 404
- sql - 日期差异的 SQL Server 窗口函数
- python - 解析字符串以获取特定字符之前和之后的数字
- python-3.x - Python selenium 错误:没有这样的元素:无法找到元素
- php - 如果用户尝试多次登录,如何触发?
- http - Nifi流文件进度
- android - Firebase 数据库 Object.toString()' 上的空对象引用错误
- mysql - mysql Creating a Generated Column