r - 对成对列应用条件
问题描述
假设有以下情况:
Statistic1 Condition1 Statistic2 Condition2 0.00001 Y 0.02 NA 0.03 Y 0.0001 NA 0.01 NA 0.001 Y ..............
总共 20.000 行和 60 列。假设如果相对 Statistic* 列中的值 <0.05,您希望将“Condition*”列中的 NA/Y 替换为 0。检查将涉及配对列 Statistic*-Condition*。怎么可能在大量的列和行上做到这一点?
先感谢您
乙
解决方案
一种tidyverse
可能是:
df %>%
mutate_at(vars(matches("Condition")), list(~ (. = 1))) %>%
rowid_to_column() %>%
gather(var, val, -rowid) %>%
arrange(rowid) %>%
group_by(rowid, pair = parse_number(var)) %>%
mutate(val = (lag(val, default = 0) < 0.05) * val) %>%
ungroup() %>%
select(-pair) %>%
spread(var, val) %>%
select(-rowid)
Condition1 Condition2 Statistic1 Statistic2
<dbl> <dbl> <dbl> <dbl>
1 1 0 0.00001 1
2 1 1 0.03 0.0001
3 1 1 0.01 0.001
在这里,它首先将 1 分配给所有“条件”列并创建一个行 ID。其次,它执行从宽到长的数据转换,不包括行 ID。第三,它根据行ID排列数据,并按行ID和由列中的数字组成的对来分组。第四,检查统计量是否小于 0.05。最后,它将数据返回到其原始格式并删除冗余变量。
我使用了这个示例数据,在其中添加了一个统计量等于 1 的案例:
df <- read.table(text = "Statistic1 Condition1 Statistic2 Condition2
0.00001 Y 1 NA
0.03 Y 0.0001 NA
0.01 NA 0.001 Y",
header = TRUE,
stringsAsFactors = FALSE)
推荐阅读
- javascript - 禁用特定页面的机车滚动
- python - 如果dict值等于数字,如何打印带有字典中项目的值?
- oracle - ORA-04092: 无法在触发器中回滚
- python - 显示 Django 图像:视图和模型需要冲突的静态根目录
- c# - Bogus - Faker 选择随机的自定义类型
- angular - 抛出新错误('找不到本地“打字稿”包。')
- javascript - React 测试找不到已安装的模块
- android - 如何使用kotlin协程在recycleview中显示和隐藏按钮并进行一些去抖动
- jhipster - 如何扩展 JHipster JDL
- reactjs - 响应媒体查询/使用 Shopify 显示的产品