![](/img/trans.png)
[英]replace some column values from a data.frame based on another data.frame
[英]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 天作為時間點。
我編寫了代碼來生成一個單獨的“data.frame B”,它將一些異常值轉換為 NA。 這些 NA 與 Treatment-Animal-Measure 列值的特定組合相關聯。 我的目標是使用“data.frame B”中的此類組合值列表來搜索“data.frame A”中的匹配案例,並將值列中的數字替換為 NA,跨越數據集中的所有時間點。
我已經研究過索引、lapply() 和 for 循環來解決這個問題,但在每種情況下都被卡住了。 這是所需的“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.