r - case_when 输出以两个字符列为条件
问题描述
我目前正在尝试根据两个字符列填充列。
示例代码:
A <- structure(list(Name = c("Piece 1", "Piece 1", "Piece 1","Piece 1"), Size = c("S",
"M", "L", NA_character_), SKU = c(NA_character_, NA_character_, NA_character_,NA_character_
)), row.names = c(NA, -4L), class = "data.frame")
这是我当前方法的预览,不确定为什么它没有响应这种情况。如果名称 == "X" 和大小 == "Y" ~ "自定义字段":
A <- A %>%
mutate(Size = replace_na(Size, "OS")) %>%
mutate(SKU = case_when(
SKU == (Name == "Piece1" &
Size == "S") ~ "PS",
SKU == (Name == "Piece1" &
Size == "M") ~ "PM",
SKU == (Name == "Piece1" &
Size == "L") ~ "PL",
SKU == (Name == "Piece1" &
Size == "OS") ~ "POS",
TRUE ~ as.character(SKU)))
有什么建议么?
解决方案
SKU ==
中似乎没有必要case_when
。要匹配的文本也应该是准确的。您正在与Name == "Piece1"
您拥有的数据进行比较"Piece 1"
(带有空格)。
library(dplyr)
A %>%
mutate(SKU = case_when(
Name == "Piece 1" & Size == "S" ~ "PS",
Name == "Piece 1" & Size == "M" ~ "PM",
Name == "Piece 1" & Size == "L" ~ "PL",
TRUE ~ as.character(SKU)))
# Name Size SKU
#1 Piece 1 S PS
#2 Piece 1 M PM
#3 Piece 1 L PL
对于更新的数据来处理NA
值 -
A %>%
mutate(SKU = replace(Size, is.na(Size), 'OS'),
#tidyr::replace_na also works
#SKU = tidyr::replace_na(Size, 'OS'),
SKU = case_when(
Name == "Piece 1" & Size == "S" ~ "PS",
Name == "Piece 1" & Size == "M" ~ "PM",
Name == "Piece 1" & Size == "L" ~ "PL",
TRUE ~ as.character(SKU)))
# Name Size SKU
#1 Piece 1 S PS
#2 Piece 1 M PM
#3 Piece 1 L PL
#4 Piece 1 <NA> OS
推荐阅读
- tcl - 从字符串中删除双引号
- firefox - Facebook 个人资料图片未在 FireTV Firefox 浏览器上加载?
- r - Plotly:如何将另一个数据框中的文本添加到 R 中的矩阵热图?
- java - 为什么 joptionpane 不支持 \t?
- .net - IDB 命令执行非查询。检查 = 0 vs <1
- javascript - 在 axios 之后将信息从 Vuex 模块传递到组件
- java - 由于“无法删除 '/maventestproject/target/test-classes/com'”,该项目未构建。
- javascript - 如何在谷歌地图上专门删除标记
- c++ - 尝试使用负整数函数捕获
- rvm - gpg:密钥服务器接收失败:没有路由到主机堆栈溢出