簡體   English   中英

如何在R(交叉引用數據幀)中對數據幀執行基於標記的校正?

[英]How to perform marker based correction of data frame in R (cross-referencing data frames)?

用戶,

我正在嘗試根據另一個數據集(B組)中的值更改一組數據(A組)。 兩者都共享一個幾乎相同的計數器變量(TS)(由於四舍五入而有些偏差–不幸的是不可避免)。 此外,兩個集合中的條目具有不同的頻率(使A長於B)。

這是集合A的示例:

setA <- tibble(TS = c(rep(2.0913, 4), rep(2.123, 5)),
           AF3_S = 1:9,
           AF4_S = 1:9)

> setA
# A tibble: 9 x 3
     TS AF3_S AF4_S
  <dbl> <int> <int>
1  2.09     1     1
2  2.09     2     2
3  2.09     3     3
4  2.09     4     4
5  2.12     5     5
6  2.12     6     6
7  2.12     7     7
8  2.12     8     8
9  2.12     9     9

這是集合B的示例:

setB <- tibble(TS = c(2.09131, 2.12304),
               AF3_Q = c(1,4),
               AF4_Q = c(3,0))

> setB
# A tibble: 2 x 3
     TS AF3_Q AF4_Q
  <dbl> <dbl> <dbl>
1  2.09  1.00  3.00
2  2.12  4.00  0   

我想做的是,只要集合B中的標記小於2,就刪除集合A中的條目。也就是說,這種情況下的結果應如下所示:

# A tibble: 9 x 3
     TS AF3_S AF4_S
  <dbl> <int> <int>
1  2.09    NA     1
2  2.09    NA     2
3  2.09    NA     3
4  2.09    NA     4
5  2.12     5    NA
6  2.12     6    NA
7  2.12     7    NA
8  2.12     8    NA
9  2.12     9    NA

我試着用for循環完成此操作。 但是,由於實際文件非常長(A〜1,5Mio行,B〜50K行),因此需要太多的迭代,這就是為什么循環是不可能的。

會有人對如何解決這個問題有想法嗎? 我也會對閱讀材料感興趣,以了解更多有關如何在R中有效處理此類問題的信息。

感謝你並致以真誠的問候

麥可

您的資料

setA <- tibble(TS = c(rep(2.0913, 4), rep(2.123, 5)),
           AF3_S = 1:9,
           AF4_S = 1:9)

setB <- tibble(TS = c(2.09131, 2.12304),
               AF3_Q = c(1,4),
               AF4_Q = c(3,0))

您必須決定的第一件事是兩個double何時“相等”。 假設當第2個十進制數字匹配時,值是相等的,您可以使用

round(setA$TS * 100) == round(setB$TS[1] * 100)
# [1]  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE FALSE FALSE

現在我們可以使用match返回與setB$TS匹配的setA$TS的行索引

I <- match(round(setA$TS*100), round(setB$TS*100))
I
# [1] 1 1 1 1 2 2 2 2 2

需要注意的是長度I等於的數的,行setA ,但該值的行指數setB

然后,對於每一列,我們使用ifelse返回一個條件值

setA$AF3_S <- ifelse(setB$AF3_Q[I] < 2, NA, setA$AF3_S)
setA$AF4_S <- ifelse(setB$AF4_Q[I] < 2, NA, setA$AF4_S)
setA

# A tibble: 9 x 3
     # TS AF3_S AF4_S
  # <dbl> <int> <int>
# 1  2.09    NA     1
# 2  2.09    NA     2
# 3  2.09    NA     3
# 4  2.09    NA     4
# 5  2.12     5    NA
# 6  2.12     6    NA
# 7  2.12     7    NA
# 8  2.12     8    NA
# 9  2.12     9    NA

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM