R 在mutate中使用ifelse并处理NA';s
谢谢你抽出时间 关于在R 在mutate中使用ifelse并处理NA';s,r,if-statement,dplyr,R,If Statement,Dplyr,谢谢你抽出时间 关于在mutate函数中使用ifelse,我有一个问题ifelse来自baseR,而mutate来自dplyr包 我的问题是关于ifelse如何处理NA值 我有两个字符向量: example\u character\u vector包含一些单词和偶尔出现的NA值,而另一个向量color\u indicator仅包含单词绿色、黄色和红色 我想改变我的数据帧example\u data\u frame以创建一个新的override\u color\u指示器变量,该变量根据exampl
mutate
函数中使用ifelse
,我有一个问题ifelse
来自base
R,而mutate
来自dplyr
包
我的问题是关于ifelse
如何处理NA
值
我有两个字符向量:
example\u character\u vector
包含一些单词和偶尔出现的NA
值,而另一个向量color\u indicator
仅包含单词绿色、黄色和红色
我想改变我的数据帧example\u data\u frame
以创建一个新的override\u color\u指示器
变量,该变量根据example\u character\u vector
中的条件将一些黄色转换为绿色
示例数据:
example_character_vector <- c("Basic", NA, "Full", "None", NA, "None",
NA)
color_indicator <- c("Green", "Green", "Yellow", "Yellow", "Yellow",
"Red", "Red")
example_data_frame <- data.frame(example_character_vector,
color_indicator)
(对于格式设置,我深表歉意-我尝试将其设置为堆栈溢出的最佳格式。)
上述代码生成此数据帧:
example_character_vector color_indicator override_color_indicator
1 Basic Green Green
2 <NA> Green Green
3 Full Yellow Green
4 None Yellow Yellow
5 <NA> Yellow <NA>
6 None Red Red
7 <NA> Red Red
example_character_vector color_indicator override_color_indicator
1 Basic Green Green
2 <NA> Green Green
3 Full Yellow Green
4 None Yellow Yellow
5 <NA> Yellow Yellow
6 None Red Red
7 <NA> Red Red
我找了很多答案,但到处都找不到。我可以创建一个变通方法,然后返回并手动将条目分配给Yellow,但从编程的角度来看,我不喜欢这个选项
而且,我只是有点好奇为什么会发生这种行为。这个问题我已经碰到过好几次了
谢谢你的时间 试试这个
case\u when
是一种更灵活的向量化if
,允许您使用TRUE
来表示“否则,请使用color\u指示器中的值”
示例数据帧%
变异(x=案例(颜色=黄色)&
示例\u字符\u向量==“完整”~“绿色”,
真彩色(U指示器)
#>示例字符向量颜色指示器x
#>1基本绿色
#>2绿色
#>3全黄绿色
#>4无黄色
#>5黄-黄
#>6无红色
#>7红色
你应该在这里使用case\u,但是你得到NA
的原因是因为第二个ifelse
。关于NA
如何在R中传播的一个有趣的事情是,(从文档中)“如果结果不明确,结果将是NA“。因此,因为我们知道这将是FALSE
,而不管NA
,所以我们
NA&FALSE
#>[1]错误
但是由于这是不明确的,NA
在这里传播
NA&TRUE
#>[1]NA
第5行的TRUE
表示黄色
,但stru-detect
将返回NA
,因此ifelse
返回NA
。您可以通过添加&来解决此问题!在该行中是.na(例如字符向量)
:
库(tidyverse)
示例\u数据\u帧%
变异(
覆盖颜色指示器=
如果有(
颜色指示灯==“绿色”,
“绿色”,
如果有(
颜色指示器==“黄色”&
str_detect(示例_character_vector,“Full”)&!is.na(示例_character_vector),
“绿色”,
如果有(
颜色指示器==“黄色”&
(!str_detect(示例_character_vector,“Full”)| is.na(示例_character_vector)),
“黄色”,
“红色”
)
)
)
)
#>示例字符向量颜色指示器覆盖颜色指示器
#>1基本绿色
#>2绿色
#>3全黄绿色
#>4无黄色
#>5黄-黄
#>6无红色
#>7红色
但在
时一定要使用case\u @CalumYou我很感谢你的贡献,但我一般建议在编辑别人答案中的代码时稍微轻一点。请记住这一点。很抱歉覆盖:我不想重复,我已经写了同样的内容。
example_character_vector color_indicator override_color_indicator
1 Basic Green Green
2 <NA> Green Green
3 Full Yellow Green
4 None Yellow Yellow
5 <NA> Yellow <NA>
6 None Red Red
7 <NA> Red Red
example_character_vector color_indicator override_color_indicator
1 Basic Green Green
2 <NA> Green Green
3 Full Yellow Green
4 None Yellow Yellow
5 <NA> Yellow Yellow
6 None Red Red
7 <NA> Red Red