【发布时间】:2020-12-22 01:00:29
【问题描述】:
我有一个看起来像这样的数据,
可以使用代码构建:
df<-structure(list(Gender = c("M", "F", "M", "F", "F"), Location = c("Cleveland, OH",
"New Olreans, LA", "Chicago, IL", "Strongsville, OH", "Boston, MA"
)), row.names = c(NA, -5L), class = c("tbl_df", "tbl", "data.frame"
))
规则是: 如果 Gender=="F" 并且我们在 Location 中找到“OH”,则注释 ="Female in OH" 如果 Gender=="F" 并且我们在 Location 中找不到“OH”,则评论 ="Female in Other" 如果 Gender=="M" 并且我们在 Location 中找到“OH”,则评论 ="Male in OH" 如果 Gender=="M" 并且我们在 Location 中找不到“OH”,则评论 ="Male in Other"
所以我的代码是
df<-df %>%
mutate(Comment = case_when(Gender=="F" & grep("OH", df$Location)~"Female in OH",
Gender=="F" & !grep("OH", df$Location)~ "Female in Other",
Gender=="M" & grep("OH", df$Location2)~ "Male in OH",
Gender=="M" & !grep("OH", df$Location)~ "Male in other)",
TRUE~NA))
这行不通。谁能给我一些指导?
【问题讨论】:
-
使用
grepl而不是grep。前者将根据需要返回一个布尔值,后者返回匹配项的索引,这不是您所期望的。 -
我试过
grepl仍然得到错误代码Error: must be a character vector, not a logical vector -
另外三件事:(1)不要在
mutate中使用df$,这几乎肯定是错误的; (2) 将你上次的NA改为NA_character_; (3) 将您的错字Location2更改为Location。通过这三个更改,它对我有用。 (顺便说一句:“它不起作用” 根本没有帮助。如果您在问题中包含文字错误文本,它通常会帮助更多。) -
您的最后一个
TRUE~...不是必需的,因为如果没有匹配项,case_when的默认操作是分配NA的特定于类的版本。 (你知道NA至少有七种类型吗?) -
谢谢。我输入
TRUE~以防万一我错过了其他任何内容。