![](/img/trans.png)
[英]replace values with NA across multiple columns if a condition is met in R
[英]Replace certain values across multiple columns, before column values change, with NA in R
我有一個這樣的數據框:
dat <- data.frame(Target = c(rep("01", times = 8), rep("02", times = 5),
rep("03", times = 4)),
targ2clicks = c(1, 1, 1, 1, 0, 0 ,0 , 1, 1, 0, 0, 0, 1,
0, 0, 0, 1),
targ2midclicks = c(1, 1, 1, 1, 0, 0 ,0 , 1, 1, 0, 0, 0, 1,
1, 0, 0, 1),
targ2rClicks = c(0, 0, 0, 1, 0, 0 ,0 , 1, 0, 0, 0, 0, 1,
1, 1, 1, 1))
Target targ2clicks targ2midclicks targ2rClicks
1 01 1 1 0
2 01 1 1 0
3 01 1 1 0
4 01 1 1 1
5 01 0 0 0
6 01 0 0 0
7 01 0 0 0
8 01 1 1 1
9 02 1 1 0
10 02 0 0 0
11 02 0 0 0
12 02 0 0 0
13 02 1 1 1
14 03 0 1 1
15 03 0 0 1
16 03 0 0 1
17 03 1 1 1
我想編寫一些代碼來檢測剩余 3 列中每個目標的第一行是否為 1,如果是,則將第一個 0 之前出現的所有“1”替換為“NA”。 但是,我希望它為所有 3 列單獨執行此操作,即使用 OR 邏輯而不是 AND。 這是我想要的結果:
Target targ2clicks targ2midclicks targ2rClicks
1 01 NA NA 0
2 01 NA NA 0
3 01 NA NA 0
4 01 NA NA 1
5 01 0 0 0
6 01 0 0 0
7 01 0 0 0
8 01 1 1 1
9 02 NA NA 0
10 02 0 0 0
11 02 0 0 0
12 02 0 0 0
13 02 1 1 1
14 03 0 NA NA
15 03 0 0 NA
16 03 0 0 NA
17 03 1 1 NA
這篇文章是相關的,並擴展了之前的一篇文章: 在 R 中的值更改之前刪除某個值的行這里還有一篇類似的文章,我正在努力適應我自己的需求: 用 NA 跨多個列替換值如果在 R 中滿足條件
這是我到目前為止所嘗試的,但並不完全正確:
library(naniar)
dat1 <- dat %>%
group_by(Target) %>%
replace_with_na_if(.predicate = c(dat$targ2clicks[1]==1 | dat$targ2midclicks[1]==1 | dat$targ2rClicks[1]==1),
condition = cumany(~.x) == 0)
這給了我一個警告: Error in probe(.x, .p) : length(.p) == length(.x) is not TRUE
非常感謝任何幫助!
您可以嘗試使用cumall
。 這將有效地將不等於零的值轉換為NA
直到第一個零。 該邏輯將給出與上述相同的結果。 但是,如果您的實際需求不同,或者您想顯式檢查給定Target
的第一行以確保等於 1,則可以改為first(.) == 1 & cumall(. != 0)
。
library(tidyverse)
dat %>%
group_by(Target) %>%
mutate(across(.cols = starts_with("targ2"),
~replace(., cumall(. != 0), NA)))
輸出
Target targ2clicks targ2midclicks targ2rClicks
<chr> <dbl> <dbl> <dbl>
1 01 NA NA 0
2 01 NA NA 0
3 01 NA NA 0
4 01 NA NA 1
5 01 0 0 0
6 01 0 0 0
7 01 0 0 0
8 01 1 1 1
9 02 NA NA 0
10 02 0 0 0
11 02 0 0 0
12 02 0 0 0
13 02 1 1 1
14 03 0 NA NA
15 03 0 0 NA
16 03 0 0 NA
17 03 1 1 NA
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.