本文介绍了将基于另一列的列中的值替换为R的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试根据不同列中的数据替换列的值,但这不起作用。以下是一些示例数据。

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%

这篇关于将基于另一列的列中的值替换为R的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

11-02 03:20