gpt4 book ai didi

r - 如何在 R 中使用三个 data.frames 创建双种子 "if"循环?

转载 作者:行者123 更新时间:2023-12-02 15:15:54 24 4
gpt4 key购买 nike

我有一个数据框如下,df1df2:

# data
df1 <- read.table(text = "
SNP CHR BP A1 A2 zscore P CEUmaf LOC
rs58043752 1 3344877 A G 0.289 0.7726 . 1:3344877
rs2483242 1 3345145 A T 0.393 0.6946 . 1:3345145
rs1572039 1 3345216 T C 0.443 0.658 . 1:3345216
rs1537407 1 3345705 T C -0.289 0.7726 . 1:3345705
rs2493277 1 3346348 C G -1.552 0.1207 0.09167 1:3346348
rs11583353 1 3346403 C T -0.414 0.6786 0.875 1:3346403",
header = TRUE, stringsAsFactors = FALSE)
df2 <- read.table(text = "
CHR POS ID AA DA DAF SDS LOC
1 3344877 rs58043752 G A 0.1095 0.80517243505521 1:3344877
1 3345145 rs2483242 T A 0.5746 0.741513997303754 1:3345145
1 3345216 rs1572039 T C 0.0784 0.130228249846394 1:3345216
1 3345705 rs1537407 C T 0.798 0.275710355505832 1:3345705
1 3346348 rs2493277 G C 0.5737 0.283452115383779 1:3346348
1 3346403 rs11583353 C T 0.2238 -0.0246952604330743 1:3346403",
header = TRUE, stringsAsFactors = FALSE)

我有第三个数据框 (df3),例如:

Input_SNP  SDS
1:3344877 NA
1:3345145 NA
1:3345216 NA
1:3345705 NA
1:3346348 NA
1:3346403 NA

我想将 df1 的 A1 和 A2 与 df2 的 AA 和 DA 进行比较,然后将输出输出到第三个 df3。我的逻辑是这样的:

  1. 如果 df1 中的 df1$zscore 为正:我想看看是否 df1$A1 == df2$DA,如果是,那么我想将 df2$SDS 放入 df3$SDS。如果 df1$A1 == df2$AA,那么我想将 df2$SDS 的负数放入 df3$SDS
  2. 如果 df1 中的 df1$zscore 为负数:我想看看是否 df1$A2 == df2$DA,如果是,那么我想将 df2$SDS 放入 df3$SDS如果 df1$A2 == df2$AA,那么我想将 df2$SDS 的负数放入 df3$SDS

最终输出将如下所示:

    Input_SNP      SDS
1:3344877 0.805
1:3345145 0.742
1:3345216 -0.130
1:3345705 -0.276
1:3346348 -0.283
1:3346403 -0.025

最佳答案

这是另一种方法。首先我们确定 zscore 在哪里为负。然后选择哪一列将匹配到 df2。接下来确定哪个 df2 列匹配。第 4 行是针对两个数据帧之间不匹配的情况的保护措施。最后,我们根据条件返回正或负的 SDS

coll <- (df1$zscore < 0) + 1L
indx1 <- df1[c("A1","A2")][cbind(1:nrow(df1),coll)]
matches <- max.col((xx=indx1 == df2[c("DA","AA")]))
is.na(matches) <- rowSums(xx) == 0L
df3$SDS <- df2$SDS * ifelse(matches == 1,1,-1)
df3
# Input_SNP SDS
# 1 1:3344877 0.80517244
# 2 1:3345145 0.74151400
# 3 1:3345216 -0.13022825
# 4 1:3345705 -0.27571036
# 5 1:3346348 -0.28345212
# 6 1:3346403 -0.02469526

关于r - 如何在 R 中使用三个 data.frames 创建双种子 "if"循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40580301/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com