使用行名和列名在数据框中选择要替换的特定数据

问题描述 投票:0回答:1

我试图在我的数据表中用 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
r select na .when
1个回答
0
投票

如果我没理解错的话,你可以使用

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
© www.soinside.com 2019 - 2024. All rights reserved.