r - 根据另一个因素的水平改变一个因素的水平
问题描述
我有一个包含许多变量的数据集,其中两个称为“动物”和“植物”。两个变量都是因子,并且都是二元的,即它们要么是文本值,要么是 NA。
例如:
animal <- c(NA, NA, "cat", "cat", NA)
plant <- c("ivy", NA, "ivy", NA, NA)
value <- c(1:5)
df <- data.frame(animal, plant, value)
> df
animal plant value
1 <NA> ivy 1
2 <NA> <NA> 2
3 cat ivy 3
4 cat <NA> 4
5 <NA> <NA> 5
当植物的值为“ivy”而动物的值为“猫”时,我想将植物的值更改为NA(即,两者不能为真,动物值优先。我不我的其他变量没有任何变化
我尝试了以下方法,但收到错误消息:
df <- df %>% if (isTRUE(animal == "cat")) {plant==NA}
Error in if (.) isTRUE(animal == "cat") else { :
argument is not interpretable as logical
In addition: Warning message:
In if (.) isTRUE(animal == "cat") else { :
the condition has length > 1 and only the first element will be used
我的目标输出是:
> df
animal plant value
1 <NA> ivy 1
2 <NA> <NA> 2
3 cat <NA> 3
4 cat <NA> 4
5 <NA> <NA> 5
我真的很感激任何帮助。我确信有一种非常简单的方法可以做到这一点,也许我看不到树木的树木。
解决方案
library(dplyr)
df %>%
mutate(plant = case_when(animal == 'cat' & plant == 'ivy' ~ NA_character_,
TRUE ~ plant))
这给了我们:
animal plant value
1 <NA> ivy 1
2 <NA> <NA> 2
3 cat <NA> 3
4 cat <NA> 4
5 <NA> <NA> 5
推荐阅读
- excel - 从月度收益中查找 Excel 中的 MTD、QTD 和 YTD
- ios - CIVector 使用行优先还是列优先?
- sql - 将两列之间的差异百分比计算为结果中的单独列
- java - (PySpark) 路径错误:线程“main”中的异常 java.io.ioexception 无法运行程序“python”
- javascript - 将图片从 Google Cloud Function 上传到 Cloud Storage
- wix - 在 wix 安装程序脚本中有条件地设置快捷方式参数
- node.js - mongoose 修复了唯一且稀疏的索引,并且可以采用空值
- c++ - glm::lookat,OpenGL 中的透视澄清
- ms-access - 如何使用组合框在 Ms Access 中打开特定表单
- c - 在c中加倍的数字字符串