【问题标题】:str_replace pattern is "" gives "Error in mutate_impl(.data, dots) : Evaluation error: Not implemented."str_replace 模式是“”给出“mutate_impl(.data, dots) 中的错误:评估错误:未实现。”
【发布时间】:2018-06-02 20:58:24
【问题描述】:

我在 df 中有一个特征,其中一些缺失值显示为“”。

unique(page_my_df$Type)
[1] "list"              "narrative" "how to"            "news feature"     
[5] "diary"     ""                  "interview" 

我想用“未知”替换所有“”实例。

page_my_df <- page_my_df %>% 
  mutate(Type = str_replace(.$Type, "", "unknown"),
         Voice = str_replace(.$Voice, "", "unknown"))

mutate_impl(.data, dots) 中的错误:评估错误:未实现。

阅读一些文档here,特别是在模式下:

使用boundary() 匹配字符、单词、行和句子的边界。空模式“”等价于边界(“字符”)。

所以我尝试了:

page_my_df <- page_my_df %>% 
  mutate(Type = str_replace(.$Type, boundary(""), "unknown"),
         Voice = str_replace(.$Voice, boundary(""), "unknown"))

然后给出:

mutate_impl(.data, dots) 中的错误: 评估错误:“arg”应该是“character”、“line_break”、“sentence”、“word”之一。

如何在 dplyr::mutate() 中将空字符串替换为“未知”?

【问题讨论】:

  • 您可以改用 nchar() 进行测试。对于“”,其他所有不为 0
  • 为什么不能使用mutate(Type=ifelse(Type=="", NA, Type))甚至na_if(Type, "")

标签: r dplyr


【解决方案1】:

通过检查字符串长度的另一种解决方案:

library(dplyr)

strings <- c("list","narrative","how to","news feature","diary","","interview" )
df <- data.frame(ID = 1:length(strings), strings, stringsAsFactors = FALSE)

> df
  ID      strings
1  1         list
2  2    narrative
3  3       how to
4  4 news feature
5  5        diary
6  6             
7  7    interview

df <- df %>% mutate(strings = if_else(nchar(strings) == 0, "unknown", strings))

> df
  ID      strings
1  1         list
2  2    narrative
3  3       how to
4  4 news feature
5  5        diary
6  6      unknown
7  7    interview

【讨论】:

    【解决方案2】:

    这是一种方法:

    library(tidyverse)
    library(stringr)
    
    z <- c( "list",  "narrative",  "how to",  "news feature",  
    "diary",  "" , "interview" )
    
    data.frame(element = 1:length(z), Type = z) %>%
      mutate(Type = str_replace(Type, "^$", "unknown"))
    #output
      element         Type
    1       1         list
    2       2    narrative
    3       3       how to
    4       4 news feature
    5       5        diary
    6       6      unknown
    7       7    interview
    

    另外,使用.$ mutate 调用中也无需引用数据帧

    ^ 和美元符号 $ 是元字符,分别匹配行首和行尾的空字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-12
      • 2018-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多