首页 > 解决方案 > 不能使用 grepl 和 mutate 函数

问题描述

问题:我正在尝试使用 mutate、ifelse 和 grepl 函数从歌词 3 中提取数据。每年存储艺术家姓名、歌词和记录的地方。我正在尝试创建一个名为“十年”的新变量,并每年按十年存储。简单地说,1980-1989 就是 1980 年代等等。但相反,函数将所有内容重命名为 2010 年代,并给我一个问题陈述,说“参数‘模式’的长度 > 1,并且只使用第一个元素”下面是我的代码:

 lyrics3 <-lyrics3 %>%
  mutate(decade = ifelse(grepl("198", year), "1980s",
    ifelse(grepl("199", year), "1990s",
    ifelse(grepl("200", year), "2000s", "2010s"))))

标签: rif-statementdplyrgrepl

解决方案


您是否考虑过使用 case_when() 函数?

 library(tidyverse)

df <- data.frame(lyrics = c("a", "b", "c", "d"),
                 Year = c(1986, 1992, 2004, 2015))

df <- df %>%
  mutate(Decade = case_when(
    grepl("198",  Year) ~ "1980s",
    grepl("199",  Year) ~ "1990s",
    grepl("200",  Year) ~ "2000s",
    TRUE ~ as.character(Year)
    ))

推荐阅读