将基于另一列的列中的值替换为 R [重复]

2023-12-06

我试图根据不同列中的数据替换列的值,但它不起作用。这是一些示例数据。

df <- data.frame(Col1 = 1:10,
                 Col2 = c("a", "a", "a", "b", "b", "c", "c", "d", "d", "d"),
                 Col3 = c("11%", "12%", "13%", "14%", "15%", "16%", "17%", "18%", "19%", "20%"))

如果 Col2 的值为 b,我需要将 Col3 的值更改为 NA 或 0(NA 更准确,但对于我正在做的事情,0 也可以)。第 3 列是百分比,我知道我在这里使用了字符串。

我尝试了几种方法,最近的就是我在下面列出的循环。不过,我愿意接受任何解决方案。我的循环不工作是因为我没有定义模式吗?

for(i in df){
  if(df$Col2 == "b"){
    str_replace(df$Col3, replacement = NA)
  }
}

print(df)

这是一个base R解决方案:

df$Col3[df$Col2 == 'b'] <- NA

这是一个dplyr/tidyverse解决方案:

library(dplyr)    

df %>% mutate(Col3 = ifelse(Col2 == 'b',NA_character_,Col3))

(原创,但效率较低case_when解决方案)

df %>% 
  mutate(Col3 = case_when(Col2 == 'b' ~ NA_character_,
                          TRUE ~ Col3))

这给了我们:

  Col1 Col2 Col3
1     1    a  11%
2     2    a  12%
3     3    a  13%
4     4    b <NA>
5     5    b <NA>
6     6    c  16%
7     7    c  17%
8     8    d  18%
9     9    d  19%
10   10    d  20%
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将基于另一列的列中的值替换为 R [重复] 的相关文章

随机推荐