簡體   English   中英

在 R 中構造循環以根據來自 data.frame B 的列值的匹配子集搜索和替換 data.frame A 中的值?

[英]Construct loop in R to search and replace values in data.frame A based on matched subsets of column values from data.frame B?

我有一個原始的“data.frame A”,其中包含在時間過程實驗中進行的一組測量結果。 有對照和測試治療變量,每次治療兩只動物,每只動物三個測量值,以及第 1、2 和 3 天作為時間點。

數據框A

我編寫了代碼來生成一個單獨的“data.frame B”,它將一些異常值轉換為 NA。 這些 NA 與 Treatment-Animal-Measure 列值的特定組合相關聯。 我的目標是使用“data.frame B”中的此類組合值列表來搜索“data.frame A”中的匹配案例,並將值列中的數字替換為 NA,跨越數據集中的所有時間點。

數據框B

我已經研究過索引、lapply() 和 for 循環來解決這個問題,但在每種情況下都被卡住了。 這是所需的“data.frame C”的圖像,顯示了我所追求的替換:

結果“data.frame C”

任何關於最佳行動方案或解決方案的指導,將不勝感激!

這是使用dplyr的一種解決方案。 確保您的 dfb 僅包含您想要更改為NA的行,然后我們將執行左連接和一個簡單的case_when來完成這項工作。

dfa <- data.frame(
 Treatment = rep(c(rep("Control", 6), rep("Test", 6)), 3),
 Timepoint = c(rep("Day1", 12), rep("Day2", 12), rep("Day3", 12)),
 Animal = rep(c(rep("A", 3), rep("B", 3)), 6),
 Measure = rep(c(c("A1", "A2", "A3"), c("B1", "B2", "B3")), 6),
 Value = c(10, 11, 9, 10, 2, 9, 10, 11, 9, 10, 2, 9, rep(10, 24))
)

請注意對 dfb 的細微修改...

dfb <- data.frame(
  Treatment = c("Test", "Control"),
  Animal = c("B", "B"),
  Measure = c("B2", "B2"),
  ReplaceValue = c(TRUE, TRUE)
)

dfb
  Treatment Animal Measure ReplaceValue
1      Test      B      B2         TRUE
2   Control      B      B2         TRUE
library(dplyr)

dfc <- 
  left_join(dfa, dfb, by = c("Treatment", "Animal", "Measure")) %>%
  mutate(Value = case_when(
    is.na(ReplaceValue) ~ Value,
    TRUE ~ NA_real_
    )
  ) %>%
  select(-ReplaceValue)
head(dfc, 12)
#>    Treatment Timepoint Animal Measure Value
#> 1    Control      Day1      A      A1    10
#> 2    Control      Day1      A      A2    11
#> 3    Control      Day1      A      A3     9
#> 4    Control      Day1      B      B1    10
#> 5    Control      Day1      B      B2    NA
#> 6    Control      Day1      B      B3     9
#> 7       Test      Day1      A      A1    10
#> 8       Test      Day1      A      A2    11
#> 9       Test      Day1      A      A3     9
#> 10      Test      Day1      B      B1    10
#> 11      Test      Day1      B      B2    NA
#> 12      Test      Day1      B      B3     9

暫無
暫無

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

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