【问题标题】:How to use substring function with apply in R?如何在 R 中将子字符串函数与 apply 一起使用?
【发布时间】:2017-03-25 22:35:07
【问题描述】:

数据集包含有关超级英雄的信息。此代码从字符串 'name' 中删除烦人的括号部分:

# package loading
library(fivethirtyeight)

# data opening
data(package ="fivethirtyeight")
data(comic_characters)

for (i in 1:length(comic_characters$name)) 
{
  bracket[i]                <-  which(strsplit(comic_characters$name[i], "")[[1]] == "(")
  comic_characters$name[i]  <-  substr(comic_characters$name[i], start = 1, stop = bracket[i]-2)
}

如何使用应用函数(没有 for 循环)做同样的事情?以下是我的尝试:

     bracket = sapply(sapply(strsplit(comic_characters$name, ''), function(x) 
    which(x == '(')), `[`, 1)  

    # here comes the problem:
        comic_characters$name <- lapply(x, function(x)
 substr(comic_characters$name, start=1, stop=bracket[i]-2)) 

我该怎么做?提前谢谢!

【问题讨论】:

  • 感谢您的帮助。你能告诉我如何使用 apply 函数解决这个问题吗?

标签: r apply lapply sapply


【解决方案1】:

这不会达到同样的效果吗?

df <- data.frame(comic_characters)
df$name <- sub("\\(.*", "", df$name)

【讨论】:

    【解决方案2】:

    您可以使用stringr 包来实现您的目标。

    # package loading
    library(fivethirtyeight)
    library(stringr)
    
    # data opening
    data(package ="fivethirtyeight")
    data(comic_characters)
    
    # remove text enclosed in brackets from character names
    cleaned_character_names <- str_replace_all(
      string = comic_characters$name,
      pattern = "\\(.*\\)",
      replacement = ""
    )
    
    # trim whitespace from start and ending of the character names
    cleaned_character_names <- str_trim(
      string = cleaned_character_names
    )
    

    一些字符名称有两部分括在括号中,例如“流氓(安娜玛丽)(Earth-616)”。上面的代码将从角色名称中删除“(Anna Marie)”和“(Earth-616)”。

    【讨论】:

      猜你喜欢
      • 2016-05-31
      • 2016-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多