本文介绍了将基于另一列的列中的值替换为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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!