我试图在我的数据表中用 0 替换特定的 NA 值。我不希望所有 NA 都被替换,只有在某些条件下才被替换。例如,“当行为 Cole_1 且列包含名称‘Fall1’时,将 NA 替换为零”。我有一个庞大的数据集,所以我需要尽可能少的手动指定,对每一列进行编号不是一种选择。基本上,我希望能够像玩战舰一样瞄准细胞。
我试过:
whentest <- count_order_site %>%
when(select(contains("Fall1")) &
count_order_site[count_order_site$Point_Name == "Cole_1", ],
count_order_site[is.na(count_order_site)] <- 0 )
但出现错误“
contains()
必须在selecting 函数中使用。”
我什至不确定这是否是获得我想要的东西的正确途径。
基本布局思路(抱歉,它堆得很奇怪,我不知道如何让它们并排放置):
点名 | ACWO_Fall1 |
---|---|
科尔_1 | NA |
Cole_2 | 3 |
ACWO_FAll2 | HOSP_FAll1 |
---|---|
3 | NA |
NA | 5 |
在函数之后数据看起来像:
点名 | ACWO_Fall1 |
---|---|
科尔_1 | 0 |
Cole_2 | 3 |
ACWO_FAll2 | HOSP_FAll1 |
---|---|
3 | 0 |
NA | 5 |
如果我没理解错的话,你可以使用
mutate
across
来包括包含某些字符值的列,例如“Fall1”。然后,使用 replace
函数,使用 is.na
替换那些缺失的值,并且 point_name
具有特定值,例如“Cole_1”。
下面的例子有几个额外的列来证明逻辑是否正确。
library(tidyverse)
df %>%
mutate(across(contains("Fall1"), ~replace(., is.na(.) & point_name == "Cole_1", 0)))
输出
point_name ACWO_Fall1 ACWO_Fall2 HOSP_Fall1 Other1 Other_Fall1
1 Cole_1 0 3 0 NA 6
2 Cole_2 3 NA 5 NA NA